구조체의 배열에 할당 된 메모리를 해제하는 것과 관련된 초보자 질문이 있습니다.SIGTRAP을 일으키는 자유 함수
typedef struct {
char code[6];
char name[31];
char cname[31];
int anno;
} cliente;
cliente *readcostumers(char*filename,int * dim) {
int i;
cliente *d;
cliente temp;
FILE*fp;
fp=fopen(filename,"r");
*dim=0;
//count the number of lines
while(fscanf(fp,"%s %s %s %d", temp.code, temp.name, temp.cname,&(temp.anno))==4)
(*dim)++;
rewind(fp);
//allocate "dim" struct
int ss = sizeof(cliente);
d = (cliente*)malloc(ss * (*dim));
cliente *currCli = d;
//assign lines to struct
for(i=0; i<*dim; i++) {
fscanf(fp,"%s %s %s %d",currCli->code, currCli->name, currCli->cname, &(currCli->anno));
currCli = currCli + ss;
}
fclose(fp);
return d;
}
코드의이 작품은 기본적으로 특정 패턴으로 포맷 라인의 수,과, 텍스트 파일을 읽고 strcut cliente
의 배열에 내용을 할당합니다 이것은 코드입니다.
이 내가 할당 이전의 메모리를 해제하는 경우를 제외하고, 잘 작동하는 것 같다 :
는int main() {
int x,i;
cliente *f = readcostumers("c:/temp/clienti.txt",&x);
int len = sizeof(cliente);
for(i=0; i<x; i++) {
printf("\n%s %s %s %d",(f + len*i)->code, (f + len*i)->name,
(f + len*i)->cname, (f + len*i)->anno);
}
free(f);
}
마지막 문장은 무료 (f)에 인쇄 된 값은 파일의 올바른 읽기 입력해도하는 SIGTRAP 예외가 발생합니다.
A3789 Paolo Rossi 2001
X478D Marcantonio Bianchi 2004
어디 실수 :
파일의 내용이 무엇입니까? 당신이 readcostumers
에 currCli
를 증가하면