c++ - 这些二维数组 (C++) 是否耗尽了内存?

标签 c++ memory multidimensional-array crash stack-overflow

程序的主要功能是(后面省略了一些额外的代码):

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),问题就解决了,但我没有足够的空间来输入函数。有办法解决这个问题吗?

最佳答案

堆栈的大小比堆的大小小得多。用 newmalloc 分配的任何东西都在堆上,但如果你不小心的话,你可以非常非常快地填满堆栈。

适合给定的网站,您可能会得到一个包含如此多大型数组的 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/

相关文章:

c++字符串使用assign函数和直接使用 '='改变值的区别

c++ - 为什么 std::allocator::deallocate 不是 noexcept?

c++ - 为什么我的简单 XOR 加密程序不能正确转换字符,为什么它会在末尾添加更多字符?

c++ - 有什么好的方法可以在 C++ 11 中初始化二维数组吗?

c - 在不知道索引的情况下在 C 中迭代多维数组

c++ - 如何防止 std::string 使用 initializer_list 构造函数?

linux - 用于删除旧文件的 BASH 脚本,并创建一个包含已删除文件总数和大小的文本文件。

iPhone 操作系统内存问题 - 如何调试?

Java查看Redis内存使用情况

php - 获取深度多维数组的所有 child