提问者:小点点

简单数组原因异常


#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    float x[1000][1000];

    return 0;
}

我得到了“s.exe中0x01341637处的第一次机会异常:0xC00000FD:堆栈溢出”。为什么?


共3个答案

匿名用户

数组太大,堆栈放不下。您没有足够的堆栈空间来存放元素。

需要在堆上分配数组。您可以使用关键字来实现这一点,但更简单的方法是只使用

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位环境中可以很容易地完成。