在FOR循环结束时获取分段错误 p> C++程序中for循环结束时出现分段错误。

在FOR循环结束时获取分段错误 p> C++程序中for循环结束时出现分段错误。,c++,segmentation-fault,C++,Segmentation Fault,这是我对代码部队问题的解决方案(竞赛已经结束) 这是我的密码 int main() { int n,x,i; cin>>n>>x; int a[n]; int num[100010] = {0}; long long int ans = 0; int temp; for(i=0;i<n;i++) { cout<<n<<endl; cin>&g

这是我对代码部队问题的解决方案(竞赛已经结束)

这是我的密码

int main()
{
    int n,x,i;
    cin>>n>>x;
    int a[n];
    int num[100010] = {0};
    long long int ans = 0;
    int temp;
    for(i=0;i<n;i++)
    {
        cout<<n<<endl;
        cin>>temp;
        cout<<"hello"<<endl;
        a[i]=temp;
        DEBUG(temp);
        num[temp]++;
        DEBUG(i);

    }

    for(i=0;i<n;i++)
    {
        int p = (x^a[i]);
        if(p==a[i])
        {
            ans += num[a[i]]-1;
        }
        else
        {
            ans += num[p];
        }

    }

    cout<<ans/2<<endl;

    return 0;
}

因为您的一些输入超出了数组num的大小,数组num的大小为100010

第34行

int p=(x^a[i])

这是一个异或运算,可以导致p大于100010。
例如,您的输入非常接近100010,但小于100010。当你用64800对它进行异或运算时,你可以在该输入中输入一些0到1,使其大于100010。

操作x^a[i]可能抛出一个大于10010的数字。尝试打印每个迭代的值,看看您有哪些值。

请在此处发布代码,最好是a,而不是代码的链接。哪个为循环?其中有两个。我没有得到你的第二个循环:if语句中的条件只有在x为零时才为真,所以你为什么不直接检查它?第三个:你是如何确定从哪里得到SEGFULT的?我理解这个错误。我是我的错,这里给出的答案是正确的。谢谢。但这仍然不能解释第一个for循环后的分段错误。您如何知道第一个for循环中存在分段错误?你最后得到的输出是什么?对不起,我明白了。这是我这边的错误。
85 64800
20812 83722 93301 72100 80530 13151 28349 97347 96271 41926 5482 11948 14969 90929 13749 92741 22218 21400 31801 10359 85151 23766 12470 68911 71675 33258 99921 44095 92037 36792 17169 81178 59941 37670 12836 26619 84395 5247 40024 15103 88105 87155 94050 11878 94868 8533 71675 37910 59558 22652 61981 8920 25631 62466 3498 69017 3488 14376 88486 98762 38766 86800 6168 76705 38901 14818 51981 45686 14274 13704 67957 75111 54600 74833 67172 13908 35100 93393 2610 63043 69433 3968 80412 11293 5053