我使用這個功能:對於結構的陣列功能段錯誤
int times_on_table(char *search,struct table index[],int wct){
int ct=0,num=0;
while(ct<wct){
if(strcmp(search,(index[ct].label))==0) {
num++;
}
ct++;
}
return num;
}
通過結構數組搜索和查找某個字符串存儲陣列中的所有時間和返回的字符串次數發生。每當我在主內使用此功能:
/*EDIT: i had a main from the wrong program my apologies*/
int main(int argc, char **argv){
int numwds=get_num_words(argv[1]);
struct table index[numwds];
int a;
struct cmd_ops symbol[22];
store(argv[1],index,numwds);
ops_gen(symbol);
int b=times_on_table("in",index,numwds);
printf("%d",b);
}
該代碼工作正常。然而,當我嘗試使用某些功能裏面像這樣的
struct table* store(char *filename,struct table index[]) {
FILE *fp;
fp=fopen(filename,"r");
char *a;int d=0,e=0,t=0;
a=malloc(60);
int wordcount=get_num_words(filename);
while(d<wordcount){
fscanf(fp,"%s",a);
if ((index[d].label=strdup(a))==NULL)
break;
index[d].word_num=d;
times_on_table("this",index,wordcount);/*when i comment this out
of my code it runs fine*/
index[d].address=findline(filename,index[d].label,wordcount,index,t);
d++;
}
free(a);
}
代碼不運行,並給了我一個分段錯誤。有什麼想法嗎?
編輯:我不知道這是否有幫助,但是當我得到段錯誤時,它甚至在執行main中的第一行代碼之前發生。
編輯:這是導致當times_on_table()被調用段錯誤的其他功能:
int findline(char *filename,char *check,int wordcount,struct table index[],int t){
char *a;
a=malloc(60);
int b=line_count(filename);
int ch;
fpos_t pos;
int line=0,wd=0,loc,s=0,c=1,times;
times=times_on_table(check,index,wordcount);
FILE *fp;
fp=fopen(filename,"r");
int list[wordcount];
while(c<=b){
fscanf(fp,"%s",a);
fgetpos(fp,&pos);
ch=fgetc(fp);ch=fgetc(fp);
if(strcmp(a,check)==0){
if(times==0)
return line;
else
times--;
}
if(ch==10){
line++;c++;
}
else
fsetpos(fp,&pos);
}
return line;
}
正是在此功能,我第一次加入times_on_table(),並已分段錯誤讓我的計劃從跑步。
我的想法是,你應該在調試器中運行它,以找到給出seg-fault的確切代碼行。 – 2012-04-24 18:17:11
然後,您可以檢查當時各種變量的值,以確定它爲何出現故障。然後,您可以反向查找問題。 – 2012-04-24 18:17:48
你有沒有試過valgrind? – 2012-04-24 18:18:29