关于链表存储的内存释放问题
问:用链表存储数据要用new申请空间,当程序结束的时候要释放空间,怎么释放,是一个一个结点的释放还是只要把头指针付空那?能不能给段代码说明一下.再有就是为什么数组不需要自己释放? 问题点数:20、回复次数:4Top
1 楼fiftymetre(50米深蓝)回复于 2006-03-16 22:39:22 得分 5
是一个一个结点的释放还是只要把头指针付空那?
把头指针付空 这样怎么可以的呢,这样不是全都断掉了吗
.再有就是为什么数组不需要自己释放? //会吗?
如果是分配数组内存,释放时需要使用 [] 如;
int *p=new int[10];
delete []p; //由于分配数组需要使用 []
Top
2 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-03-17 01:04:58 得分 10
struct listnode
{
int data;
#ifndef NDEBUG
int used; /* is .data holding valid data? */
#endif
struct listnode *next;
} *head = NULL;
struct listnode *
new_node (size_t cnt)
{
struct listnode *first = NULL;
struct listnode **next;
int i;
/* use calloc(3) so we don't need to zero-up the memory manually */
first = (struct listnode *) calloc (1, sizeof (struct listnode));
if (!first)
{
die ("calloc() failed");
}
next = &first->next;
for (i = 1; i < cnt; ++i)
{
*next = (struct listnode *) calloc (1, sizeof (struct listnode));
if (!(*next))
{
die ("calloc() failed");
}
next = &(*next)->next;
}
return first;
}
/* Free p and all its ->next nodes */
void
free_list (struct listnode *p)
{
struct listnode *tmp;
while (p)
{
tmp = p->next;
free (p);
p = tmp;
}
}
今晚刚写的。。Top
3 楼ykzhujiang(朱朱)回复于 2006-03-17 03:23:26 得分 5
每个节点都要释放
数组释放是因为有专门的语法 delete []Top
4 楼chenglitao(不好意思)回复于 2006-03-17 11:24:13 得分 0
我想也是,可是书上怎么都一点都没提,有点疑惑是不是可以很简单的释放.原来如此Top




