为什么在提交时C ++中会出现此RE(SIGSEGV)错误?

时间:2020-03-09 05:52:50

标签: c++ segmentation-fault runtime-error

在提交代码时,我遇到了RE(SIGSEGV)错误。 我的代码是:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int T,val,v;
    int min = INT_MAX;
    int N,M;
    cin >> T;
    while(T--){
        cin >> N >> M;
        vector<int> vec(M+1,0);
        vector<int> arr1;
        for(int i=0;i<N;i++){
            cin >> v;
            arr1.push_back(v);
        }
        for(int j=0;j<N;j++){
            cin >> val;
            vec[arr1[j]]+=val;
        }
        for(int i=1;i<=M;i++){
            if((vec[arr1[i]])<min && (vec[arr1[i]])!=0){
                min = vec[arr1[i]];
            }
        }
        cout << " box: "<<endl;
        for(int a=0;a<vec.size();a++){
            cout << vec[a] << " ";
        }
        cout << endl;
        cout << min << endl;
        vec.clear();
        arr1.clear();
    }   
    return 0;
}

问题链接:https://www.codechef.com/MARCH20B/problems/CHPINTU。 谁能告诉我为什么会这样?我该如何克服这个问题? 谢谢。

1 个答案:

答案 0 :(得分:1)

N可能小于M,在这种情况下,这可能会导致细分错误:

for(int i=1;i<=M;i++){
    if((vec[arr1[i]])<min && (vec[arr1[i]])!=0){
        min = vec[arr1[i]];
    }
}

您应该查看的是 vec [i] ,而不是 vec [arr1 [i]]

Nit:这仍然会给您WA(错误答案),但不会导致SIGSEGV,我可以找到的错误之一是仅在开始时初始化 min ,而不是在INT_MAX中对其进行初始化。 T

上的循环