c++ - 未处理的异常堆栈溢出 win32 控制台应用程序

标签 c++ visual-studio-2010 stack-overflow

我使用 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];

只要 NxNyNz 为 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/

相关文章:

java - 调用重写的 super 方法会导致无限递归

c++ - 像数组一样访问 std::map 的 std::map

C++11 lambda函数对象成员

c++ - 最小化调试信息的大小以在远程位置进行测试

c++ - 首次运行后倒数功能无法正常工作

c++ - QCustomPlot链接器

c++ - 在 Visual Studio 2010 中链接 boost 库时出现问题。

visual-studio - Visual Studio - 如何显示 svn 注释?

c - 编写 Return-to libc 攻击,但无法使其正常工作?

c - 执行缓冲区溢出时argc的地址有什么意义吗?