The following C snippet:
[...] void f1(void* a){ printf("f(a) address = %p \n",a); a = (void*)(int*)malloc(sizeof(int)); printf("a address = %p \n",a); *(int*)a = 3; printf("data = %d\n",*(int*)a); } void f(void){ void* a1=NULL; printf("a1 address = %p \n",a1); f1(a1); printf("a1 address = %p \n",a1); printf("Data.a1 = %d\n",*(int*)a1); } [...] results in
a1 address = (nil) f(a) address = (nil) a address = 0xb3f010 data = 3 a1 address = (nil) Segmentation fault (core dumped) Why doesn't a1 keep the address that has been assigned to it in the function?