我向网站提交了我的问题解决方案(http://opc.iarcs.org.in/index.php/problems/WORDLIST)。它由在线评委提供服务。每次提交时,都会显示运行时错误并显示以下消息:
运行时错误:SEG 描述:分段故障 运行时:0
这是什么错,我该如何解决? 注意:我对c ++的了解是中级的,如果您能以简单的方式解释它,我将不胜感激 这是我的问题代码:
#include<iostream>
#include<ctype.h>
#include<string.h>
using namespace std;
class problem
{
public:
int nol,k,j,w,cp;
char inp[1000][80],qed[1000][80];
problem()
{
k=j=w=cp=0;
}
void input()
{
cin>>nol;cin.get();
for(int i=0;i<nol;i+=1)
{
cin.getline(inp[i],80);
cin.clear();
}
cout<<endl;
lineprocess();
}
void lineprocess()
{
if(k<nol)
wordprocess();
else
display();
}
void wordprocess()
{
for(;;)
{
if(ch(inp[k][cp]))
{qed[w][j]=0;break;}
else
{
qed[w][j]=tolower(inp[k][cp]);
j+=1;cp+=1;
}
}
decide();
}
void decide()
{
if(inp[k][cp]==0)
{
w+=1;
cp=0;
j=0;
k+=1;
lineprocess();
}
else
{
w+=1;
j=0;
cp+=1;
wordprocess();
}
}
int ch(char a)
{
if(!isalpha(a))
return 1;
else return 0;
}
void display()
{
char dumm[80]="";
qed[w][0]='\0';
sortarray();
removerep();
for(int i=0;i<=w;i+=1)
if(strcmp(qed[i],dumm)!=0)
if(strcmp(qed[i],qed[i+1])!=0)
cout<<qed[i]<<endl;
}
void sortarray()
{
char ub[80];
for(;checksort();)
{
for(int q=0;q<w;q++)
{
if(strcmp(qed[q],qed[q+1])>0)
{
strcpy(ub,qed[q]);
strcpy(qed[q],qed[q+1]);
strcpy(qed[q+1],ub);
}
}
}
}
int checksort()
{
int t=0;
for(int i=0;i<w;i+=1)
{
if(strcmp(qed[i],qed[i+1])>0)
{t+=1;break;}
}
return t;
}
void removerep()
{
int nodw=0;
for(int i=0;i<w;i+=1)
if(strcmp(qed[i],qed[i+1])!=0)
nodw+=1;
cout<<nodw<<endl;
}
};
int main()
{
problem r2d2;
r2d2.input();
return 0;
}
答案 0 :(得分:1)
从链接页面:
您可以假设N≤10000
因为您正在使用
char inp[10000][80],qed[10000][80];
您可能会访问超出有效范围的内存,这会导致您遇到问题。将它们更改为:
fopen(filePath, "rb")