Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多维数组传递给c中的函数会导致堆栈溢出_C_Arrays_Exception_Pointers_Multidimensional Array - Fatal编程技术网

将多维数组传递给c中的函数会导致堆栈溢出

将多维数组传递给c中的函数会导致堆栈溢出,c,arrays,exception,pointers,multidimensional-array,C,Arrays,Exception,Pointers,Multidimensional Array,我有以下代码: #include <stdio.h> #include "funcs.h" void func1(int (*codes)[1296][2]); void func2(int arr0[]); void func4(int (*codes)[1296][2],int arr3[]); int func5(int isValid[]); void func6(int (*codes)[1296][2],int arr3[],int var0); void func7(i

我有以下代码:

#include <stdio.h>
#include "funcs.h"
void func1(int (*codes)[1296][2]);
void func2(int arr0[]);
void func4(int (*codes)[1296][2],int arr3[]);
int func5(int isValid[]);
void func6(int (*codes)[1296][2],int arr3[],int var0);
void func7(int arr2[]);
void func8(int arr1[],int idx);
void func1()
{
....
}
#包括
#包括“funcs.h”
无效函数1(int(*代码)[1296][2]);
void func2(int arr0[]);
无效函数4(int(*代码)[1296][2],int arr3[]);
int func5(int是有效的[]);
无效函数6(int(*代码)[1296][2],int arr3[],int var0);
无效函数7(int arr2[]);
void func8(int arr1[],int idx);
void func1()
{
....
}
其中,
codes
是尺寸为1296 x 1296 x 2的3d阵列。当我尝试编译代码时,即使在
void func1
之后,也会出现未处理的异常和堆栈溢出。为什么会这样?如何向我的每个函数发送
代码

编辑:我不能使用:

  • 除stdio.h以外的任何LIB
  • 任何全局或静态变量

就我所知,这就是所有的限制。

类型为
int
的1296x1296x2元素数组需要超过8mib的堆栈,这超出了某些系统的允许范围。在MacOSX(10.9.1)上,默认堆栈大小为8MIB


使用
malloc()
或其类似方法分配数组,或静态分配数组,而不是在堆栈上分配数组。

必须导致编译错误,因为您分配的堆栈超过了系统允许的数量。因此,如果静态地分配大数组(从显示的代码判断),可能会很快耗尽堆栈内存

您显示的代码不能是此错误的原因;这只是功能原型。因此,请检查代码中的静态内存分配


也考虑使用堆->动态分配内存,我不能在Windows上使用MALOC和IM。如果不能使用<代码> MalCube()/代码>,则必须对数组进行静态分配。在任何函数外定义数组(有或没有关键字

static
),或在关键字
static
的函数内定义数组。我也不能使用静态或全局变量。为了大声叫喊!把所有老师强加的糟糕条件摆在前面,这样我们就知道我们(你们)必须面对的是什么废话。这就像拔掉母鸡的牙齿!谢谢你更新问题;请注意,这些限制对于人们理解至关重要。除非可以增加程序堆栈上的可用空间或减小阵列的大小,否则您将被套住。你在做什么,需要这么大的阵列,还是老师也指定了尺寸?为什么你需要这么大的3D阵列?问题是如何分配阵列。一旦分配了它,将它传递给函数并不是问题,但分配它却是问题。你在哪个系统上(哦,评论中提到了Windows)?你能在你的系统上增加一个程序的堆栈大小吗?因为我正在写mastermind(4^6=1296)。我使用的是64位windows 7 professional。如何增加堆栈大小?我的直接反应是“重新思考您的算法-您做错了”。你为什么需要这么多东西还远远不清楚。你用那个阵列干什么?第三维度是什么(2)。说到这里,你在用二维做什么?我尝试了另一种使用二维数组的方法,我从他们的系统中得到了超时。4^6=4096。使用位(或半字节)代替int。