i have following code, , wondering why works does:
void addfive(int* a) { int* b; b = a; *b = *b + 5; } int main(int argc, char** argv) { int* nbr; *nbr = 3; addfive(nbr); std::cout << *nbr << std::endl; return 0; }
this produces output of 8.
i wondering why? pointer int* b
runs out of scope @ end of addfive function. furthermore, int* b
has no knowledge existence of int* nbr
(one advantage of smart pointers). expected code create segmentation fault in line std::cout << *nbr << std::endl;
why code not give segmentation fault?
function addfive
normal should written this:
void addfive(int* a) { *a += 5; }
and there no problem pointer's b
scope because pointer local variable.
real problem in code didn't allocate memory integer , trying access uninitialized memory through pointer nbr
leads undefined behaviour. on machine have segmentation fault @ line:
*nbr = 3;
your main should rewritten this:
int* nbr = new int(3); addfive(nbr); std::cout << *nbr << std::endl; return 0;
then can reliably expect '8' in output.
Comments
Post a Comment