我使用 Microsoft Visual C++ 2010 Express 编写了模拟代码作为 win32 控制台应用程序。只要我的三个变量在一定长度以下,代码就可以正常工作。它们在我的 main.cpp 的开头看起来像这样,并且只在整个 main.cpp 文件中需要。
#define Nx 19
#define Ny 19
#define Nz 19
我使用这些变量在主程序中创建一些 3-d 矩阵
double a[Nx][Ny][Nz];
double b[Nx][Ny][Nz];
只要 Nx
、Ny
和 Nz
为 18 或更小,代码就可以正常运行,但是当我尝试使用更大的值时我收到一条错误消息,如下所示:
main.exe 中 0x012dd4d7 处的未处理异常:0xC00000FD:堆栈溢出。
然后代码在 chkSTLk.asm
内停止。我绝不是专家,甚至不是非常有经验的人,但如果有人能用相当简单的术语解释如何解决这个问题,我将不胜感激。
最佳答案
您有 2 个数组,每个数组(假设 2 字节双倍大小)是 19 的立方乘以 8 字节。两者都超过 100 KB。我不确定你如何(或是否)在 Windows 中做它,但你可以相应地增加你的堆栈内存。或者,为您的数组使用动态分配。我们只能想象堆栈上还有什么,但如果堆栈溢出,您需要增加堆栈内存大小或在堆上分配内存。
请注意,对于 18x18x18 数组和 19x19x19 数组,每个数组的内存大小差异为 (53872 - 11664) = 42208 字节,因此将 19 更改为 18 的差异并不像您想象的那么微不足道
关于c++ - 未处理的异常堆栈溢出 win32 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664055/