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

Popular posts from this blog

c++ - No viable overloaded operator for references a map -

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - Cannot secure connection using TLS -