【发布时间】:2013-04-12 14:53:34
【问题描述】:
我有以下代码,其中每当我尝试释放我的 malloc'ed 内存时,我有时会遇到分段错误。此错误仅在释放与我的某些结构成员关联的内存时发生(仅在昵称及以上),这意味着我从未遇到过 free(player->name) 的分段错误,但大约有一半的时间我从其他两个 free 中获得分段错误(看看instruments怎么是null,没有效果)
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以查看发生了什么问题以及在哪里。
标签: c pointers struct malloc fault