Malloc à l'intérieur d'un appel de fonction semble être d'obtenir libéré sur le retour?

Je pense que j'ai eu le plus de base:

int main(int argc, char ** argv) {
  int * arr;

  foo(arr);
  printf("car[3]=%d\n",arr[3]);
  free (arr);
  return 1;
}

void foo(int * arr) {
  arr = (int*) malloc( sizeof(int)*25 );
  arr[3] = 69;
}

La sortie est ceci:

> ./a.out 
 car[3]=-1869558540
 a.out(4100) malloc: *** error for object 0x8fe01037: Non-aligned pointer
                         being freed
 *** set a breakpoint in malloc_error_break to debug
>

Si quelqu'un peut jeter de la lumière sur l'endroit où ma compréhension est un échec, ce serait grandement apprécié.