单链表的释放内存free(delete)的顺序
2011-09-26 12:56
162 查看
在单链表中我们在程序的最后加上一个释放内存的方法或者操作,这是一个很好的习惯。
但是在销毁过程当中,我遇到了一个问题,那就是释放的顺序应该是怎么样的,刚开始的时候我很思维习惯的用“数据输出”的方法,顺序的将内存释放了,但是出现了内存错误(泄露),百思不其解。
后来发现,原来是释放的顺序搞反了,如果顺序释放的话,释放了第一个节点,其后的节点都丢失了,因为其后的节点都是通过头结点来寻找的。
下面附上做实验时候的内存释放代码:如果有不对的地方,请大家纠正
但是在销毁过程当中,我遇到了一个问题,那就是释放的顺序应该是怎么样的,刚开始的时候我很思维习惯的用“数据输出”的方法,顺序的将内存释放了,但是出现了内存错误(泄露),百思不其解。
后来发现,原来是释放的顺序搞反了,如果顺序释放的话,释放了第一个节点,其后的节点都丢失了,因为其后的节点都是通过头结点来寻找的。
下面附上做实验时候的内存释放代码:如果有不对的地方,请大家纠正
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; }
相关文章推荐
- C与C++中内存分配释放-malloc,free,new,delete
- free/delete 释放的内存大小?
- malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存
- C/C++ 基础-free 和 delete 释放内存(转)
- C与C++中内存分配释放-malloc,free,new,delete
- 高质量C++编程之(7.5 free 和delete 把指针怎么啦? 7.6动态内存会被自动释放吗?)
- 内存分配方式,堆区,栈区,new/delete/malloc/free
- 模拟new[]和delete[]操作符开辟内存空间及释放内存空间过程
- 使用二级指针分配和释放内存示例 malloc(), free()
- del 4000 ete 与 delete[] 释放内存
- 在C++动态库中释放调用动态库程序中生成的指针new和delete 或 malloc和free
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- free() 是如何释放不同内存区块大小的指针?
- delete 指针之后 ,只是释放了指针指向的内存空间,指针不会自动置为NULL,还有delete 遇到指针为NULL时不会调用析构函数
- malloc(0)参数为0的情况,malloc分配最小空间,free真的释放内存了?
- 动态内存管理详解:malloc/free/new/delete/brk/mmap
- 内存分配方式,堆区,栈区,new/delete/malloc/free
- 为什么我delete后内存没有被释放?
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- 模拟new[]和delete[]操作符开辟内存空间及释放内存空间过程