分段错误 c++ in>500

Segmentation fault c++ in>500

本文关键字:gt in 错误 c++ 分段      更新时间:2023-10-16

我有个问题。一旦在数据中输入超过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 to,这是不会发生的。

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

在您的程序中,二维数组变量是巨大的。VC++系统中的默认堆栈大小为1MB。如果n>500,则会违反此限制。这应该是分割错误的原因。

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

首先,这种语法是不合法的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创建二维阵列。

#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));

代码的其余部分不需要更改(假设您在问题中发布的是整个代码)。