Home > Software engineering >  float vector and pointer returns different values even though they have same adress
float vector and pointer returns different values even though they have same adress

Time:06-30

I have a class which returns vector<vector<float>> with its getTemplates() function. My code is as follows for this case:

cout << "Get [0][0] " << s.getTemplates()[0][0] << endl;
cout << "vec addr " <<  &(s.getTemplates()[0][0]) << endl;

float *embFloat = s.getTemplates()[0].data();
cout << "embFloat: " << embFloat << endl;
cout << "*embFloat " << *embFloat << endl;
cout << "embFloat[0] " << embFloat[0] << endl;

and the output is as follows:

Get [0][0] 0.00191223
vec addr 0x555557973280
embFloat: 0x555557973280
*embFloat -8.71571e 33
embFloat[0] -8.71571e 33

I expect embFloat[0] and s.getTemplates()[0][0] to return exactly same value. What am I missing here?

CodePudding user response:

s.getTemplates() returns a temporary which (in this particular instance) goes out of scope at the end of the statement that contains it.

float *embFloat is therefore a dangling pointer - i.e. it's pointing to an object that no longer exists.

  •  Tags:  
  • c
  • Related