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?
 
     
     
     
     
    