将 3D 数组传递给函数。
Passing a 3D array to a function.
我很难将 3D 数组传递给函数。我已经用谷歌搜索死了,我想我明白了,但是代码在运行时崩溃了,没有输出。 (代码块,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");
}
你有堆栈溢出
256*256*256 = 16777216 bytes > STACK_SIZE
这就是分段错误的原因。
如果您需要如此大的内存,您必须使用 malloc
。
问题是 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
函数的声明没有任何问题。
我很难将 3D 数组传递给函数。我已经用谷歌搜索死了,我想我明白了,但是代码在运行时崩溃了,没有输出。 (代码块,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");
}
你有堆栈溢出
256*256*256 = 16777216 bytes > STACK_SIZE
这就是分段错误的原因。
如果您需要如此大的内存,您必须使用 malloc
。
问题是 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
函数的声明没有任何问题。