我有以下代码,其中每当我尝试释放我的malloc'ed内存时,我有时会出现段错误。这个错误只发生在释放与我的一些结构成员相关的内存时(仅在昵称和更高版本上),这意味着我从来没有得到free(player->name)
的分段错误,但大约有一半时间我从另外两个释放中获得了分段错误仪器仪表是一个空,它没有任何效果)malloc'd指针偶尔出现的段错误
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