分段错误(11)使用长变量时出错

时间:2018-03-30 06:45:38

标签: c++ segmentation-fault

我在以下代码中遇到了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;
}

1 个答案:

答案 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] ,这会导致分段错误。

  

声明阵列

时请小心