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