程序的主要功能是(后面省略了一些额外的代码):
int main() {
cout << "FIRST LINE";
int fract[501][501];
int rfract[501][501];
int nufract[501][501];
int nurfract[501][501];
int snufract[501][501];
int snurfract[501][501];
system("PAUSE");
return 0;
}
有趣的是,如果我只有前 2 个数组,程序运行良好,但如果我有其他 4 个数组中的任何一个(即使只有其中一个),程序在启动时崩溃。我使用的是 4 GB RAM 的计算机,但我没有收到任何有用的错误消息,尽管这似乎就是问题所在。如果我将所有这些的大小更改为 [101][101]
(从 ~1.2 MB 到 ~50kB),问题就解决了,但我没有足够的空间来输入函数。有办法解决这个问题吗?
最佳答案
堆栈的大小比堆的大小小得多。用 new
或 malloc
分配的任何东西都在堆上,但如果你不小心的话,你可以非常非常快地填满堆栈。
适合给定的网站,您可能会得到一个包含如此多大型数组的 Stack Overflow。
为此,请尝试以下代码:
#include <iostream>
int main(int argc, char* argv[])
{
int sarr2d[5][10];
typedef int dimension[10];
dimension* arr2d = new dimension[5];
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
sarr2d[i][j] = i*j;
}
}
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
arr2d[i][j] = i*j;
}
}
// print it out
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
std::cout << arr2d[i][j] << " ";
}
std::cout << "\n";
}
delete [] arr2d;
return 0;
}
这是受到问题 C++ Multi-dimensional Arrays on the Heap 的启发
关于c++ - 这些二维数组 (C++) 是否耗尽了内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359609/