我有问题。一旦输入超过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,但不会发生。
答案 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));
其他代码无需更改(假设您在问题中发布的是整个代码)。