Free()语句CRASH?帮助这个功能解决:(

时间:2015-01-15 11:53:29

标签: c list function memory free

我遇到此功能的问题:

 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。 先谢谢你们!

1 个答案:

答案 0 :(得分:-1)

如果您在未分配的内存地址上调用free,则会崩溃。使用此:

if(tmp != NULL) free(tmp);