当前位置: 技术问答>linux和unix
二叉树全局结构变量分配内存的释放问题
来源: 互联网 发布时间:2015-09-17
本文导语: 操作系统:linux 9.0 编译:gcc 全局的结构定义如下: struct csortlist { char UsrName[26]; struct csortlist *rptr; struct csortlist *lptr; }; typedef struct csortlist csortnode; typedef csortnode *csortlink; csortlink csortroot; 现在用上面的...
操作系统:linux 9.0
编译:gcc
全局的结构定义如下:
struct csortlist
{
char UsrName[26];
struct csortlist *rptr;
struct csortlist *lptr;
};
typedef struct csortlist csortnode;
typedef csortnode *csortlink;
csortlink csortroot;
现在用上面的结构建立二叉树,如果建立 5000 万个节点,发现程序结束后,用 top 查看内存被消耗殆尽,没有自动释放,造成下次建立节点的时候转而系统去消耗交换区的内存。
请教各位怎么使用完二叉树能够完全释放内存?
编译:gcc
全局的结构定义如下:
struct csortlist
{
char UsrName[26];
struct csortlist *rptr;
struct csortlist *lptr;
};
typedef struct csortlist csortnode;
typedef csortnode *csortlink;
csortlink csortroot;
现在用上面的结构建立二叉树,如果建立 5000 万个节点,发现程序结束后,用 top 查看内存被消耗殆尽,没有自动释放,造成下次建立节点的时候转而系统去消耗交换区的内存。
请教各位怎么使用完二叉树能够完全释放内存?
|
你会用new或malloc为每个节点分配内存,那么释放不是一样吗?!用delete 或 free呀!。
对二叉树你当然要在程序退出之前"遍历"每个节点,用对应的函数释放每个节点内存。
我不知道我理解的对吗???只要你遍历每个节点,分别从最底端的左右两个叶子节点开始释放,保证会释放的一干二净。
自己写多麻烦,用STL的map多方便呀,内部也是二叉树
对二叉树你当然要在程序退出之前"遍历"每个节点,用对应的函数释放每个节点内存。
我不知道我理解的对吗???只要你遍历每个节点,分别从最底端的左右两个叶子节点开始释放,保证会释放的一干二净。
自己写多麻烦,用STL的map多方便呀,内部也是二叉树
|
不会吧?这个……
就算是不是用delete/free也不会产生这样的情况阿,进程退出的时候系统会回收内存的,所以只要你的程序退出了,所有的内存就会被回收了……
贴代码,否则胡乱猜测没有意义……
就算是不是用delete/free也不会产生这样的情况阿,进程退出的时候系统会回收内存的,所以只要你的程序退出了,所有的内存就会被回收了……
贴代码,否则胡乱猜测没有意义……
|
删除节点时,递归删除其所有子节点,如果用malloc 申请的节点内存,那么删除子节点同时free 掉对应节点,如果你会写遍历的话一定就会写free 。