哪一部分导致“ SIGSEGV”错误,以及如何解决?

时间:2019-11-01 14:58:21

标签: c++ c++11

我在此代码中遇到运行时错误“ SIGSEGV”,我对其进行了搜索,得到了什么,此错误是由于分段错误导致的,我无法在其中找到分段错误。我想知道如何解决这个错误。

#include <iostream>

using namespace std;

int counti(int A[],int N)
{
    int d=0,i;

        for(i=0;i<N;++i)
        {
            if(A[i]==A[N-1])
            {
                d++;
            }
        }

        return d;
}

int main()
{
    int T;
    cout<<" enter total number of test cases ";
    cin>>T;

    while(T--)
    {
        int N,d;

        cout<<" enter the value of N between (1 and 16)";
        cin>>N;

        int A[16]={0,0,1,0,2,0,2,2,1,6,0,5,0,2,6,5},i;


        d=counti(A,N);



        cout<<d<<endl;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

当您尝试访问一些未定义的内存时,发生分段错误。正如您的调试观察说的那样,它正在for(i=0;i<N;++i) { if(A[i]==A[N-1]) { d++; } }中某处发生,可能是您正在尝试通过A[N-1]访问一些未定义的内存(即,当N =17时)是在尝试访问{{1 }}可能会导致分段错误(A[16]的任何大于16的值都会发生,因此请进行一些检查以避免此错误)。输入文件可以包含任何值,您需要保留边界检查。