#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
float x[1000][1000];
return 0;
}
我得到“s.exe中0x01341637的第一次机会异常:0xC00000FD:堆栈溢出。”为什么呢?
答案 0 :(得分:7)
你的数组太大而无法放在堆栈上。您没有足够的堆栈空间用于1000 * 1000
元素。
您需要在堆上分配数组。您可以使用new
关键字执行此操作,但更简单的方法是使用std::vector
。
std::vector<std::vector<float> > floats(1000);
for (unsigned i = 0; i != floats.size(); ++i) floats[i].resize(1000);
这将为您提供浮动的二维向量,每个向量包含1000个元素。
答案 1 :(得分:1)
float是4个字节,所以4 * 1000 * 1000 = 4兆字节。
“堆栈大小默认为1 MB”
见这里:http://msdn.microsoft.com/en-us/library/tdkhxaks(v=VS.100).aspx
答案 2 :(得分:0)
正如其他人所解释的,对象的大小大于为函数堆栈帧定义的(默认)大小。有两种解决方案:1)在堆上创建一个可能更大的对象;或者2)增加功能堆栈帧大小,这在32位环境中可能会有问题,因为你可以用尽可寻址空间,但它可以很容易地用64位完成。
答案 3 :(得分:-1)
只需声明您的数组静态:
static float x[1000][1000];
已编辑添加:
叹息另一个沉默的downvoter。不是我很惊讶。这显然是OP问题最简单的解决方案,因此它违反了OOP Komissariat的主要原则:最简单的解决方案总是错误的。