Вы передаете указатель по значению, а не по ссылке, поэтому, что бы вы ни делали с arr внутри foo, не будет иметь значения вне функции foo.
Как писал m_pGladiator, один из способов - объявить ссылку на указатель следующим образом (возможно только в C ++, кстати, C не знает о ссылках):
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;
}
Другой (лучше imho) способ - не передавать указатель в качестве аргумента, а возвращать указатель:
int main(int argc, char ** argv) {
int * arr;
arr = foo();
printf("car[3]=%d\n",arr[3]);
free (arr);
return 1;
}
int * foo(void ) {
int * arr;
arr = (int*) malloc( sizeof(int)*25 );
arr[3] = 69;
return arr;
}
И вы можете передать указатель на указатель. Это способ передачи C по ссылке. Сложно синтаксис немного, но хорошо - вот как С ...
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;
}