单链表的释放内存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; }
更多请访问:http://daoluan.net