1

C でプログラミングしているときに、これまでで最も奇妙な問題が発生しています。関数が実行される場合と実行されない場合があります。これらのエラーを検索しようとしても (スタック破壊が検出され、getenv のソースがありません)、時々失敗する理由の答えを見つけてください。私はそれをデバッグしようとしましたが、最後の文字 (「}」) に問題があるだけなので、他のすべての機能を実行します (そして、それらは個別に多くテストされています)。最後の関数(この関数内で実行されることもあるため、動作することを保証できます)。また、関数を実行した最後の数回は、最後まで実行されることもありましたが、セグメンテーション違反が発生しました。この問題をデバッグする方法はありますか? ここに私のコードがあります:

void main(int argc, char * argv[]) {
FILE * fin=fopen(argv[1],"r");
char v[1024];
int col;
matrix m=emptyS();
while(fscanf(fin, "%s",v)!=EOF) {
    int i=0;
    int * w = (int*) malloc(sizeof (int));
    int str=strlen(v);
    int size=0;
    while(i<str) {
        char a[4];
        int y;
        for(y=0;y<4;y++)
            a[y]='\0';
        int x=0;
        while(v[i]!=',') {
            a[x]=v[i];
            i++;
            x++;
        }
        i++;
        size++;
        w=realloc(w,size*sizeof(int));
        w[size-1]=atoi(a);
    }
    m=add(m,w,size);
    col=size;
}
fclose(fin);
graphW wg=discWD(col-1);
int k=0;
while(k<(col-2)) {
    int j=k+1;
    while(j<(col-1)) {
        wg=add_Wedge(wg,k,j,mi(m,k,j,col));
        j++;
    }
    k++;
}
        int* ms=MST(wg);
graph gbayes=tree(wg,ms);
bayes b=newBN(gbayes,m);
FILE * fout=fopen(argv[2],"w");
serialize(b,fout);
fclose(fout);
}  

前もって感謝します!

4

1 に答える 1

3

範囲外になることを確認しませんx。ヴァルグリンドはあなたに言ったでしょう。

while(i<str) {
        char a[4] = { 0 };
        int x=0;
        while(v[i]!=',') {
            a[x]=v[i]; /* here you access a[x] without check for x */
            i++;
            x++; /* Here it may go >= 4*/
        }
        i++;
        size++;
        w=realloc(w,size*sizeof(int));
        w[size-1]=atoi(a);
    }
于 2012-05-26T14:22:13.927 に答える