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

时间:2013-12-18 16:59:40

标签: 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或更低,代码就可以正常运行,但是当我尝试使用更大的数字时,我会收到一条看起来像的错误消息: Unhandled exception at 0x012dd4d7 in main.exe: 0xC00000FD: Stack overflow.然后代码在chkstlk.asm内停止。我绝不是专家,甚至非常有经验,但如果有人能解释如何解决这个问题是相当简单的术语我会非常感激。

2 个答案:

答案 0 :(得分:0)

你有2个数组(假设2个字节的双倍大小)是19个立方体的8个字节。对于超过100千字节的两者。我不确定你是如何(或者如果)在windows中做的,但你可以相应地增加你的堆栈内存。或者,为数组使用动态分配。我们只能想象你在堆栈上还有什么,但如果它溢出,你需要增加堆栈内存大小或在堆上分配内存。

请注意,对于这些阵列中的每个阵列,18x18x18阵列和19x19x19阵列的内存大小差异为(53872 - 11664)= 42208字节,因此从更改19到18的差异并不像您想象的那样微不足道

答案 1 :(得分:0)

在堆中分配数组:

typedef int tdarray[Nx][Ny];

tdarray * a = new tdarray[Nz];

delete [] a;