我是新来的! 我正在为类编写此代码,并且我不断收到分段错误(核心转储)错误。为什么会这样?
int main(int argc,char *argv[])
{
char *store[100];int freq[100]={0};int flag;int count=0;int t;
for(int i=0,j=0;i<argc;i++)
{
for(int z=0;z<count;z++)
{
if(*argv[i]==*store[z]) flag=1;t=z;break;
}
if(flag==0) {*store[j]=*argv[i];j++; count++;}
else freq[t]+=1;
flag=0;
}
for(int x=0;x<count;x++) cout<<*store[x]<<"\t"<<freq[x]<<endl;
}
答案 0 :(得分:1)
您正在访问一个unitialised变量,导致未定义的行为。(int flag)
在第一次迭代中,计数将等于0,因此在使用之前不会发生内部循环,因此不会对flag进行赋值。
答案 1 :(得分:0)
似乎你想比较* argv [1]和* store [z],但* store [z]的值是多少?
在使用任何变量之前,先将其初始化!如果它是一个指针,请确保为其记录内存。
答案 2 :(得分:0)
char *argv[]
和char *store[100]
是指向char
的指针数组,即通常是以空字符结尾的字符串数组。
数组store
未初始化,因此,它包含指向某个未定义内存位置的100个指针。
排队:
if(*argv[i]==*store[z]) flag=1;t=z;break;
您要取消引用数组z
的索引store
处的指针。由于此指针未定义,程序通常会尝试访问受保护的内存位置。因此,它是段错误。