我遇到此功能的问题:
struct list{
int x;
int y;
struct list *next_ptr;
};
boolean funzione_esame(struct list **ptrptr, int *number){
if(*ptrptr != NULL){
struct list *tmp;
struct list *pos;
pos=(*ptrptr)->next_ptr;
*number=1;
while(pos != NULL){
if(pos->x <= (*ptrptr)->y){
pos->x=(*ptrptr)->y;
if(pos->x >= pos->y){
tmp=pos;
pos=pos->next_ptr;
free(tmp);
continue;
}
}
pos=pos->next_ptr;
ptrptr=&((*ptrptr)->next_ptr);
(*number)++;
}
return TRUE;
} else return FALSE;
}
我不会浪费时间向你解释它应该做什么等等。但是我无法理解为什么它会在 free(tmp); 这一行崩溃。我认为我做得很好,没有任何类型的错误。也许这是一个记忆问题而且解决方案非常简单,但我真的无法找到它^^
只要告诉我你是否需要更多信息或者我不是很清楚。抱歉我的&#34; maccheroni english&#34; :P。
先谢谢你们!
答案 0 :(得分:-1)
如果您在未分配的内存地址上调用free,则会崩溃。使用此:
if(tmp != NULL) free(tmp);