#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
float x[1000][1000];
return 0;
}
我得到了“s.exe中0x01341637处的第一次机会异常:0xC00000FD:堆栈溢出”。为什么?
数组太大,堆栈放不下。您没有足够的堆栈空间来存放
需要在堆上分配数组。您可以使用
std::vector<std::vector<float> > floats(1000);
for (unsigned i = 0; i != floats.size(); ++i) floats[i].resize(1000);
这将给你一个二维的浮动向量,每个向量有1000个元素。
另请参阅:大数组大小上的分段错误
浮点数为4字节,因此4*1000*1000=4 MB。
“堆栈大小默认值为1 MB”
请参阅此处:http://msdn.microsoft.com/en-us/library/TDKHXAKS(V=vs.100).aspx
正如其他人所解释的,对象的大小大于为函数堆栈框架定义的(默认)大小。有两种解决方案:1)在堆上创建一个对象,它可能更大;2)增加函数堆栈帧的大小,这在32位环境中可能会有问题,因为您可能会耗尽可寻址空间,但在64位环境中可以很容易地完成。