将3D数组传递给函数。

时间:2015-01-04 00:19:14

标签: c character-arrays

我很难将3D数组传递给函数。我已经用Google搜索了它,我认为我理解但是代码在运行时崩溃而没有输出。 (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");
}

2 个答案:

答案 0 :(得分:0)

你有一个堆栈溢出

256*256*256 = 16777216 bytes > STACK_SIZE

这就是分段错误的原因。

如果你需要这么大的内存,你必须使用malloc

答案 1 :(得分:0)

问题是main

中的以下行
char foo_array[256][256][256];

这会创建一个16777216字节的局部变量,它会溢出堆栈。您可以通过声明数组static

来更正问题
static char foo_array[256][256][256];

或使用malloc

为数组分配内存
char (*foo_array)[256][256] = malloc( 256 * 256 * 256 );
if ( foo_array == NULL )
    exit( 1 );      // if malloc fails, panic

如果您选择malloc,请在完成后记住free内存。

PS。 foo函数的声明没有错。