我的阵列有足够的堆栈空间,为什么这个循环失败?

时间:2011-12-21 09:44:42

标签: c++

int width = 2560;
int height = 1440;
int frameBuffer[width*height];
for (int i = 0; i < width*height; ++i)
    frameBuffer[i]=i;

这段代码锁定了进程,即使你在32位整数的范围内,我也有足够的内存来分配数组?

BTW讽刺,不是吗?在名为stackoverflow的站点上询问堆栈溢出错误:)

3 个答案:

答案 0 :(得分:7)

您可能超出了可用的堆栈空间,导致溢出。在堆栈上放置这么大的数组并不是一个好主意。

您可以自己分配缓冲区,而不是使用非标准VLA(可变长度数组):

size_t width = 2560;
size_t height = 1440;
int *frameBuffer = new int[width * height];

for (size_t i = 0; i < width * height; ++i)
    frameBuffer[i] = i;

...
delete[] frameBuffer;

另请注意size_t而非int的使用情况。在分配大小时,你应该坚持使用size_t,因为并不总是保证int能够保持足够大的大小。

答案 1 :(得分:3)

你声明它的方式,数组可能是在堆栈上分配的(我不确定)。您应该尝试动态分配它,理想情况下使用std::vector

std::vector<int> frameBuffer(width * height);

答案 2 :(得分:0)

数组要保存的元素数必须是常量值,因为数组是非动态内存块,其大小必须在执行前确定。为了创建具有可变长度的数组,需要动态内存

使用int frameBuffer[2560*1440];