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