malloc의 메모리를 해제하려고 할 때마다 가끔씩 세그먼테이션 오류가 발생하는 다음 코드가 있습니다. 이 오류는 내 구조체 멤버 중 일부와 연관된 메모리를 해제 할 때만 발생하며 (별명과 그 이후에만), free(player->name)
에 대한 세분화 오류를 결코 얻지 못한다는 것을 의미합니다. 그러나 절반 정도 시간이 지나면 다른 두 개의 해제에서 세분화 오류가 발생합니다 악기가 null의 경우,이 다음에malloc 된 포인터에 대한 가끔씩의 세그먼트 화 오류
typedef struct player_t {
char * name;
char * nickname;
Instrument * instruments;
int instrumentAmount;
} * Player;
Player playerCreate(const char* name, const char* nickname,
int maxInstruments) {
Player one=malloc(sizeof(Player));
if(one==NULL || !checkLegalName(name)|| !checkLegalName(nickname) || maxInstruments<=0) {
return NULL;
}
one->name=malloc(strlen(name)+1);
one->nickname=malloc(strlen(name)+1);
if(!one->name || !one->nickname) {
playerDestroy(one);
return NULL;
}
strcpy(one->name,name);
strcpy(one->nickname,nickname);
one->instrumentAmount=maxInstruments;
one->instruments=NULL;
return one;
}
) 효과가 없습니다 :이 해결에 어떤 도움을 주시면 감사하겠습니다
void playerDestroy(Player player) {
if(!player) {
return;
}
free(player->name);
free(player->nickname); // this is where it happens.
free(player->instruments);
free(player);
}
.
대부분의 아마 당신이 어떤 배열의 경계의 외출 일부 주소를 통해 작성하고 자유롭게하는 오류가 있습니다. 당신은 디버깅을 시도해야하고 아마도 더 편리하게'valgrind'를 실행하여 무엇이 잘못되었는지 그리고 어디에 있는지 볼 수 있습니다. – Shahbaz