Passing a 3D array to a function.

▼魔方 西西 提交于 2019-12-13 08:19:32

问题


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");
}

回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/27761051/passing-a-3d-array-to-a-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!