分段错误c ++> 500

时间:2015-11-03 18:27:11

标签: c++ segmentation-fault

我有问题。一旦输入超过500的数据,就会出现分段错误错误。 错误可能在某处。

int y = 1, n, m, x = 1, a, b;
cin >> n >> m;

long long tab[ n + 1 ][ n + 1 ];
bool od[ n + 1 ][ n + 1 ];

do
{
    do
    {
        tab[ x ][ y ] = 0;
        od[ x ][ y ] = false;
        y++;
    }
    while( y != n + 1 );

    y = 1;
    x++;
} while( x != n + 1 );

因为以后它是cin,但不会发生。

2 个答案:

答案 0 :(得分:2)

局部变量存储在堆栈部分,其大小有限。

在你的程序中,二维数组变量很大。 VC ++系统中的默认堆栈大小为1MB。在n> 500的情况下违反了该限制。这应该是分段错误的原因。

尝试动态分配内存,然后从堆中分配内存。

答案 1 :(得分:1)

首先,这种语法不合法C ++:

int y = 1, n, m, x = 1, a, b;
cin >> n >> m;

long long tab[ n + 1 ][ n + 1 ];
bool od[ n + 1 ][ n + 1 ];

可变长度数组是非标准的。但是,如果它们是,那么您更有可能超过默认堆栈大小。

相反,请使用C++,而不是扩展名。使用std::vector创建2D数组。

#include <vector>
//...
    int y = 1, n, m, x = 1, a, b;
    cin >> n >> m;

    std::vector<std::vector<long long>> (n+1, std::vector<long long>(n+1));
    std::vector<std::vector<bool>> (n+1, std::vector<bool>(n+1));

其他代码无需更改(假设您在问题中发布的是整个代码)。