int width = 2560;
int height = 1440;
int frameBuffer[width*height];
for (int i = 0; i < width*height; ++i)
frameBuffer[i]=i;
这段代码锁定了进程,即使你在32位整数的范围内,我也有足够的内存来分配数组?
BTW讽刺,不是吗?在名为stackoverflow的站点上询问堆栈溢出错误:)答案 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];