C로 프로그래밍 할 때 이상한 문제가 발생했습니다. 때때로 함수가 실행되고 다른 시간에 실행되지 않으며 이러한 오류 (스택 스매싱 감지 및 getenv에 대한 소스 없음) 나는 때때로 실패하는 이유에 대한 해답을 찾지 못하는 것 같습니다. 나는 그것을 디버깅하려고 시도하고 마지막 문자 (""})에만 문제가 있기 때문에 다른 모든 기능을 실행한다. (그러나 그것들은 많이 테스트되었지만) 가끔은 떨어져서 실행되지 않는다. 마지막 함수 (이 함수 내에서 실행되기도하기 때문에 작동 할 수 있습니다.) 또한 마지막 몇 번은 가끔씩 끝까지 실행되는 경우에도 세그멘테이션 오류가 발생한 기능을 실행했습니다. 이 문제를 디버깅 할 수있는 방법이 있습니까? 여기 내 코드는 다음과 같습니다.스택 스매싱이 감지되었고 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);
}
감사합니다.
당신은 당신의 코드를 컴파일나요? 디버거 (예 :'gdb')를 사용 했습니까? –
"내 함수가 때때로 실행되고 그렇지 않은 경우"- 어떤 함수 (예 : 이름)를 나타내는 것이 더 도움이 될 것이며 함수가 있어야 할 때 함수가 호출되지 않았거나 오류가 발생했다는 것을 의미합니까? 호출 될 때 발생합니까? – gcbenison
"이 문제를 디버그 할 수있는 방법이 있습니까?" 디버거 사용? –