| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6461 人关注过本帖
标题:创建了一个链表,但不知道如何来释放分配的内存
取消只看楼主 加入收藏
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
创建了一个链表,但不知道如何来释放分配的内存
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct student
{
    int date; //数据域
    struct student * pNext; //指针域
}* PNODE, NODE;
//函数前置声明
PNODE create_list(void);
void traverse_list(PNODE pHead);
//主函数
int main(void)
{
    PNODE pHead = NULL; //定义一个指针变量
    pHead = create_list(); //用来接受链表的头指针
    traverse_list(pHead);  //遍历输出链表中的每一个节点中数据域中的数据

    return 0;
}
//创建链表
PNODE create_list(void)
{
    int len; //节点的个数
    int temp = 0; //临时存放用户输入的节点中数据域的数据
    int i;
   
    PNODE pHead = (PNODE)malloc(sizeof(NODE)); //创建头指针
    if (NULL == pHead)
    {
        printf("内存分配失败,程序退出!\n");
        exit(-1);
    }

    PNODE pTail = pHead; //定义一个指针变量,并赋值
    pTail->pNext = NULL; //pTail 尾节点,此节点的指针域为空

    printf("请输入节点的个数:\n");
    printf("len = ");
    scanf("%d", &len);
   
    for(i = 0; i < len; i++)
    {
        PNODE pNew = (PNODE)malloc(sizeof(NODE)); //生成节点,节点的个数等于用户输入的个数,即len的值
        if(NULL == pNew)
        {
            printf("内存分配失败,程序退出!\n");
            exit(-1);
        }
        printf("请输入数值\n");
        printf("temp = ");
        scanf("%d", &temp); //输入节点数据域的值
        pNew->date = temp; //把输入的值赋给节点的数据域中存放
        //把生成的新的节点挂在pNew 后面
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }
   
    return pHead;
}
//对链表中的每个节点,遍历输出
void traverse_list(PNODE pHead)
{
    PNODE p = pHead->pNext ;
    while(NULL != p)
    {
        printf("%d\n", p->date );
        p = p->pNext ;
    }
    return;
}
是不是只需要 释放 pHead 的内存 ?
搜索更多相关主题的帖子: 如何 内存 
2012-08-15 13:29
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
遍历 释放内存会报错~~
2012-08-15 14:28
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
回复 5楼 stophin
专门建一个函数来释放这些内存?好的,我回去试试!
2012-08-15 16:29
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
回复 5楼 stophin
这个循环会不会导致尾节点的内存没能被释放 ??
p->pNext 为空的时候,循环不执行,而尾节点的指针域本来就是空的!
2012-08-16 12:53
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
void release_list (PNODE pHead)
{
    PNODE p = pHead;
    PNODE q ;
    while(NULL != p )
    {
        q = p->pNext ;
        free(p);
        p = q;
    }

    return;
}
不知道怎样写是不是对的,在运行的时候不会报错!
2012-08-16 13:18
快速回复:创建了一个链表,但不知道如何来释放分配的内存
数据加载中...
 
   



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

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