| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:[求助]关于free()函数
取消只看楼主 加入收藏
fantasyop
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2005-2-25
收藏
 问题点数:0 回复次数:3 
[求助]关于free()函数

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct LNode)

int num=20;

struct LNode
{
int num;
struct LNode* next;
};

struct LNode* talloc(void)
{
return (struct LNode*)malloc(LEN);
}

void dateget(struct LNode *_root)
{
_root->num = num++;
_root->next = NULL;
}

struct LNode *addroot(struct LNode *_root)
{
struct LNode *p = NULL, *p2 = NULL;

if(_root == NULL)
{
_root = talloc();
dateget(_root);
}
else
{
for(p=_root; p->next != NULL; p=p->next)
;
p2 = talloc();
dateget(p2);
p->next = p2;
}

return _root;
}

struct LNode *kill(struct LNode *_root, int num)
{
struct LNode *p=_root, *p2=NULL;

if(p->num == num)
{
_root = _root->next;
free(p);
}
else
{
for(;p->next->num != num && p->next != NULL; p=p->next)
;
if(p->next->num == num)
{
p2 = p->next;
p->next = p->next->next;
free(p2);
}
}

return _root;
}

main()
{
struct LNode *_root = NULL;
char i;

for(i=0; i < 10; i++)
{
_root = addroot(_root);
}

//for(i=20; i < 30; i++)
{

/*_root = */kill(_root,20); //我杀死头结点
}

for(; _root != NULL && _root->next != NULL ; _root=_root->next)
{
printf("_root=%x next=%x num=%d\n",_root, _root->next, _root->num);
}
printf("_root=%x next=%x num=%d\n",_root, _root->next, _root->num);
}

_root=273768 next=273788 num=0 //我让主函数_root仍然指向刚才释放的头结点
_root=273788 next=273798 num=21
_root=273798 next=2737a8 num=22
_root=2737a8 next=2737b8 num=23
_root=2737b8 next=2737c8 num=24
_root=2737c8 next=2737d8 num=25
_root=2737d8 next=2737e8 num=26
_root=2737e8 next=2737f8 num=27
_root=2737f8 next=273808 num=28
_root=273808 next=0 num=29
Press any key to continue...


刚回家,把这个链表kill函数写好了,我想问的是 free怎么释放结构体指针的
struct LNode
{
char* date;
int size;
int num;
struct LNode* next;
}*root; //结构体“指针变量”刚才没把这个指针打进去......

root = (struct LNode*)malloc(LEN);
root->date = (char *)malloc(20);
root->size = 100;
root->num=200;
free(root);
这样编译器给我释放的是怎么样的空间

[此贴子已经被作者于2006-5-16 17:34:32编辑过]

搜索更多相关主题的帖子: free 函数 
2006-05-16 04:15
fantasyop
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2005-2-25
收藏
得分:0 
我想问的不是链表的操作,而是free()怎么释放结构体指针变量
struct LNode
{
char* date;
int size;
int num;
struct LNode* next;
}*root;
如果我这样定义一个结构体变量 再给date申请20个空间
free(root);
这样编译器给我释放的是怎么样的空间

[此贴子已经被作者于2006-5-16 17:10:05编辑过]


今年俺是大菜鸟,明年俺希望是小菜鸟,......
2006-05-16 17:04
fantasyop
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2005-2-25
收藏
得分:0 

打住各位!!!
struct LNode
{
char* date;
int size;
int num;
struct LNode* next;
}*root; //结构体“指针变量”刚才没把这个指针打进去......

root = (struct LNode*)malloc(LEN);
root->date = (char *)malloc(20);
root->size = 100;
free(root);

这样编译器给我释放的是怎么样的空间


今年俺是大菜鸟,明年俺希望是小菜鸟,......
2006-05-16 17:26
fantasyop
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2005-2-25
收藏
得分:0 

谢谢,刚才傻掉了,忘了free不能释放结构体中的size num的整型变量的!!
把这帖删了吧!!!


今年俺是大菜鸟,明年俺希望是小菜鸟,......
2006-05-16 17:42
快速回复:[求助]关于free()函数
数据加载中...
 
   



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

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