【发布时间】:2012-05-10 21:39:11
【问题描述】:
我正在使用 VS 2010。
当我在调试模式下运行此程序时,它会引发堆栈溢出异常并在文件 chkstk.asm 的第 99 行显示断线。
但是当我在 Release 模式下运行它时,它就可以了。
此外,如果我将其中一个数组的大小减小到 10000,它在 Debug 中运行良好。是什么原因?
#include <iostream>
using namespace std;
int main()
{
char w[1000001], temp[1000001];
cout<<"Why?"<<endl;
return 0;
}
【问题讨论】:
-
您在发布模式下启用了哪些优化?编译器很有可能只是删除了数组。
-
您是在问“溢出的原因是什么?”或者“行为在不同构建模式下发生变化的原因是什么?”还是别的什么?
-
作为我找到的可能的解决方案#pragma comment(linker, "/STACK:1000000000")
-
它在调试模式下崩溃,因为您在堆栈上分配了太多变量。它不会在 RELEASE 模式下崩溃,因为编译器认识到您甚至没有使用 w 和 temp 并将它们优化为不存在。如果它们不存在,则不会占用堆栈空间,也不会导致堆栈溢出。
标签: c++ visual-studio-2010 visual-c++ stack-overflow