数组的分段失败

时间:2013-12-08 01:29:55

标签: c++

我整天都在试图找出这两个阵列产生分段错误的原因。

我可以注释掉一个并且程序运行但是同时使用它们会导致它崩溃。他们可能在记忆中重叠吗?

我很无能为力,任何帮助都会受到赞赏。

#include <iostream>

int main()
{

    int y = 3823;
    int x = 10;
    int z = 64;

    double foo[y][x];
    double bar[y][z];

    foo[2][2] = 0;
    bar[2][2] = 2;

    std::cout << foo[2][2] << std::endl;
    std::cout << bar[2][2] << std::endl;

    return 0;
}

2 个答案:

答案 0 :(得分:4)

你试图在堆栈上分配大约2兆字节。这是很多记忆。

您应该考虑某种形式的动态分配,它不会在堆栈上分配这些数组。

答案 1 :(得分:3)

当我运行它时,该程序不会崩溃(两个数组都没有注释)。

此程序只需输入main就需要超过2,263,216个字节的堆栈。默认情况下,您的操作系统很可能不提供这么多堆栈。你可以提高限制,但不知道你在使用什么操作系统,我不能确切地告诉你如何。