c++ - Properly dereferencing pointer -
i struggling handling pointers in piece of c++ code. without further ado, let me show portion of code:
in file1.cpp
void *someclass::extract() { double foo = 3.14; return (void*) &foo; // returns pointer double } in file2.cpp
void * bar = someclass->extract(); // fetches pointer double fprintf(screen, "pointer address: %p \t value: %.3e \n", bar, (double*) bar); (because of massive oversimplification of code, there may inconsistencies.) want print out value of foo in file2.cpp, retrieved calling function in file1.cpp. when compare pointer addresses of foo , bar, find identical. when want dereference pointer, bogus. suspect i'm doing wrong in dereferencing, when compare other sections of code (which did not write myself way), seems valid.
i aware supposed basic c++, somehow not working me. i'd grateful if explain me how done properly.
martijn
you attempting return pointer automatic variable, destroyed extract function exits. try , dereference pointer invalid object, undefined behaviour.
if want return pointer function, need allocate memory on free store, return pointer , remember delete later:
double *someclass::extract() { double *foo = new double(3.14); return foo; } then @ value of pointer, need dereference it:
double * bar = someclass->extract(); // fetches pointer double fprintf(screen, "pointer address: %p \t value: %.3e \n", bar, *bar); or if insist on using void* reason, make sure dereference result of pointer cast:
void * bar = someclass->extract(); // fetches pointer double fprintf(screen, "pointer address: %p \t value: %.3e \n", bar, *(double*) bar); // here ^ however, builtin types double designed passed around value, should not allocate them dynamically.
double someclass::extract() { return 3.14; }
Comments
Post a Comment