标题:链表删除中free()释放内存问题!大家帮忙看看错在哪里?
只看楼主
hwf214685147
Rank: 2
等 级:论坛游民
帖 子:70
专家分:94
注 册:2011-9-14
结帖率:62.5%
已结贴  问题点数:20 回复次数:1 
链表删除中free()释放内存问题!大家帮忙看看错在哪里?
程序代码:
/* Note:Your choice is C IDE */
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct list
{
    int date;
    struct list *next,*pre;
}node,*link;
  
link head=NULL,prelink;

link bulid(int init)
{
    link newlink=(link)malloc(sizeof(node));
    newlink->date = init;
  
    if(head==NULL)
    {
        head = newlink;
        head->next = NULL;
        head->pre = NULL;
        prelink = newlink;
    }
    else
    {
        prelink->next = newlink;
        newlink->pre = prelink;
        newlink->next = NULL;
        prelink = newlink;              
    }
    return head;
}

void display(link currlink)
{  
    link p;
    p=currlink;      
    while(p!=NULL)
    {
        printf("%d->",p->date);  
        p=p->next;
    }
}

void del(int a,link b)
{  
    link p,temp;
    p=b;      
    while(p!=NULL)
    {
        printf("%d->",p->date);   
        if(p->date==a)
        {
            if(p==head) 
            {              
                printf("dfdasfa\n");   
                head = head->next;
                head->pre =NULL;
                free(p);//此处出错
                        
            }
            else if(p->next==NULL)
            {
                p->pre->next=NULL;
                free(p);      //此出出错
            }
            else
            {
                temp = p->next;
                p = p->pre;
                p->next = temp;
                temp->pre=p;    
            }
           
        }
        p=p->next;
    }
}

void main()
{

     link frist;
     int n,i;
     printf("input your first data!\n");
     scanf("%d",&n);
     frist=bulid(n);
     for(i=0;i<3;i++)
     {
          printf("input:\n");
          scanf("%d",&n);
          bulid(n);
     }
     display(frist);
     printf("\n");
     printf("input your delete data!\n");
     scanf("%d",&n);
     del(n,frist);
     printf("\n");
     display(frist); 
}
程序中有两次使用free(),都出错了,到底要怎么写?大家帮忙看看
搜索更多相关主题的帖子: 内存 next 
2012-02-10 20:51
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
得分:20 
没发现有什么问题啊……但是释放之后没有给p赋新值,那么原来的已经释放了,继续执行p=p->next;就可能出错

酱油实习生
2012-02-10 23:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360712-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015270 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved