I think I’ve got it down to the most basic case:
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; }
The output is this:
> ./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 >
If anyone can shed light on where my understanding is failing, it’d be greatly appreciated.
You pass the pointer by value, not by reference, so whatever you do with arr inside foo will not make a difference outside the foo-function. As m_pGladiator wrote one way is to declare a reference to pointer like this (only possible in C++ btw. C does not know about references):
Another (better imho) way is to not pass the pointer as an argument but to return a pointer:
And you can pass a pointer to a pointer. That’s the C way to pass by reference. Complicates the syntax a bit but well – that’s how C is…