代码改变世界

单链表的释放内存free(delete)的顺序

2011-09-26 12:56  捣乱小子  阅读(10316)  评论(1编辑  收藏  举报

在单链表中我们在程序的最后加上一个释放内存的方法或者操作,这是一个很好的习惯。

但是在销毁过程当中,我遇到了一个问题,那就是释放的顺序应该是怎么样的,刚开始的时候我很思维习惯的用“数据输出”的方法,顺序的将内存释放了,但是出现了内存错误(泄露),百思不其解。

后来发现,原来是释放的顺序搞反了,如果顺序释放的话,释放了第一个节点,其后的节点都丢失了,因为其后的节点都是通过头结点来寻找的。

下面附上做实验时候的内存释放代码:如果有不对的地方,请大家纠正

void Destroy(AddressBook &ab)
{
	Student * temp;
	Student * del;
	del = ab.first->next;
	temp = ab.first ->next->next;
	while(temp)
	{
		free(del);
		del = temp;
		temp = temp->next;
	}
	free(del);
	free(ab.first);
	ab.length = 0;
}