我在以下代码中遇到了seg fault。任何人都可以帮我纠正吗?数组大小应该足够,我不会超出限制。
#include <iostream>
using namespace std;
int main () {
long L,N;
long sAni[1000], tAni[1000];
cin >> L;
cin >> N;
bool occupied[L+1] = {};
for (long i = 0; i < N; i++) {
cin >> sAni[i] >> tAni[i];
}
for (long i = 0; i < N; i++) {
for (long j = sAni[i]; j <= tAni[i]; j++) {
occupied[j] = 1;
}
}
long count,max = 0;
for (long i = 0; i <= L; i++) {
if (occupied[i] == 0) { // Seg fault here
count++;
} else {
if (count > max) {
max = count;
}
count = 0;
}
}
cout << max;
return 0;
}
答案 0 :(得分:0)
首先,我们无法初始化一个可变大小的数组。
我不明白你用这段代码想要实现的目标,但我知道问题出在哪里。
对于以下样本输入:
5
2
10 20
30 40
L - &gt; 5
N - &gt; 2
sAni [0] - &gt; 10,tAni [0] - &gt; 20
sAni [1] - &gt; 30,tAni [1] - &gt; 40
在下面的代码行中,
for (long j = sAni[i]; j <= tAni[i]; j++) {
occupied[j] = 1;
}
j将为10,但“占用”数组的大小仅为L + 1,即6(5 + 1),并且您尝试访问占用[10] ,这会导致分段错误。
声明阵列
时请小心