какая часть вызывает ошибку "SIGSEGV" и как ее исправить? - PullRequest
0 голосов
/ 01 ноября 2019

Я сталкиваюсь с ошибкой времени выполнения "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 голосов
/ 01 ноября 2019

Ошибка сегментации возникает при попытке доступа к некоторой неопределенной памяти. Поскольку ваше отладочное наблюдение говорит, что это происходит где-то в for(i=0;i<N;++i) { if(A[i]==A[N-1]) { d++; } }, возможно, вы пытаетесь получить доступ к некоторой неопределенной памяти через A[N-1] (то есть, когда N =17), вы пытаетесь получить доступ к A[16], что может вызвать ошибку сегментации (это произойдет при любом значении N больше 16, поэтому не забывайте проверять это). Входной файл может содержать любое значение, именно вам необходимо сохранить проверку границ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...