I'm having a hard time passing a 3D array to a function. I've googled it to death and I think I understand but the code crashes with no output when run. (codeblocks, gcc)
#include <stdio.h>
#include <stdlib.h>
void foo(char (*foo_array_in_foo)[256][256]);
int main()
{
char foo_array[256][256][256];
int line_num = 0;
printf("Hello world!\n");
foo(foo_array);
return 0;
}
void foo(char (*foo_array_in_foo)[256][256])
{
printf("In foo\n");
}
You have a stack overflow
256*256*256 = 16777216 bytes > STACK_SIZE
that is the reason for the segmentation fault.
If you need such a large ammount of memory you have to use malloc
.
The problem is the following line in main
char foo_array[256][256][256];
That creates a local variable of 16777216 bytes, which overflows the stack. You can correct the problem either by declaring the array static
static char foo_array[256][256][256];
or by allocating memory for the array using malloc
char (*foo_array)[256][256] = malloc( 256 * 256 * 256 );
if ( foo_array == NULL )
exit( 1 ); // if malloc fails, panic
If you choose malloc
, remember to free
the memory when you're done with it.
PS. there's nothing wrong with the declaration of the foo
function.