编码:我的代码中出现EquiLeader Segmentation Fault问题

时间:2018-11-06 12:41:21

标签: c++ segmentation-fault

这个简单的代码有问题。问题可能出在使用向量类:

int solution(vector<int> &A) {
    // write your code in C++14 (g++ 6.2.0)
    vector<int> left, right;
    int cnt=0,k,j;
    if (A.size()==1) return 0;
    if (A.size()==2 && A[0]==A[1]) return 1;
    if (A.size()==2 && A[0]!=A[1]) return 0;
    if (A.size()==3 && A[0]==A[1] && A[1]==A[2]) return 2;
    if (A.size()==3 && A[0]==A[1] && A[1]!=A[2]) return 0;
    for (size_t i=0; i<(A.size()-1); ++i)
    {
        left.assign( A.begin(), A.begin() + i );
        right.assign( A.begin() + i + 1, A.end());
        sort(left.begin(), right.end());
        sort(right.begin(), right.end());
        j=left.size()/2;
        k=right.size()/2;
        if (left[j]==right[k])
        {
            cnt++;
        }
    }
    return cnt;
}

执行后返回:

stderr:
Segmentation Fault

1 个答案:

答案 0 :(得分:0)

如果left[j]是因为i==0left.size(),则{p> i是越界的,所以0。 与right[k]类似。

此外,不会考虑大小写A.size() == 0,并且会包裹A.size()-1

sort(left.begin(), right.end())中还有一个错字:right.end()应该是left.end()