I\'m trying to do something with an array (malloc-ed), namely arr
of a custom struct. The array is passed by reference to a function. I get a segfault whenever I tr
The warning you get is because you forgot to #include
, so malloc
is not declared, so the compiler assumes it should return int
. This can lead to all kinds of fun problems. (And you should remove those casts.)
The other problem is in this line: (*arr[1])->i = 3;
Postfix operators (like []
) bind tighter than prefix operators (like *
), so *arr[1]
parses as *(arr[1])
.
You can write (*arr)[1]->i
instead to fix this, but as it turns out, your function never actually modifies *arr
, so there's no reason to pass arr
(the other arr
, the one in main)'s address to it. Just do this:
void doSomething(foo **arr)
{
arr[1]->i = 3;
}
and call it as doSomething(arr)
.