注册 登录
编程论坛 数据结构与算法

关于 链式存储结构的 线性表 释放动态空间问题

zhuchenxi 发布于 2011-09-20 23:38, 993 次点击
int freeP(List P,int *Len)//P是一个链式存储结构的线性表,*Len是长度
{
    int i;
    List Free;//定义一个中间变量
    Free=(list *)malloc(sizeof(int)+sizeof(List));//分配空间
       if(!Free) return ERROR;
    for(i=0;i<=*Len;i++){
        Free=P;//把P付给Free
        free(P);//释放P
        P=(list *)malloc(sizeof(int)+sizeof(List));//在给P分配空间
        if(!P) break;
        P=Free->next;//然后把Free->next付给P
    }
    return OK;
}



为什么不能这么释放链表的 空间??
为什么会出错??
我个人觉得应该没问题啊。
4 回复
#2
寒风中的细雨2011-09-21 06:43
分清楚 指针变量的存储空间(地址)   指针变量所指向的存储空间(地址)


free掉后的指针变量指向的地址不可以再去使用
P=Free->next;//然后把Free->next付给P
 
#3
zhuchenxi2011-09-21 23:16
回复 2楼 寒风中的细雨
我还是没想到怎么去释放空间。。。
#4
无名可用2011-09-22 09:25
int freeP( List P )//P是一个链式存储结构的线性表
{
    if !p return ERROR;
    List next;// Free:代表当前要释放的链表节点的下一节点
    while !p
        next = p -> next;
        free( p );
        p = next;  
    return OK;      
}
这样不知服不服合你的要求。你给的代码不全,所以不太清楚你要表达意思。
不过你的代码中有内存泄露,比如下面这两句
Free=(list *)malloc(sizeof(int)+sizeof(List));//分配空间
Free=P;// 导致你上面分配的空间再也访问不到了

#5
zhuchenxi2011-09-22 22:59
回复 4楼 无名可用
不行
1