📄 subject_16058.htm
字号:
<p>
序号:16058 发表者:天花乱追 发表日期:2002-09-25 11:18:29
<br>主题:这样的内存泄漏如何消除?
<br>内容:NODE *build(int a[],int low,int high)<BR>{<BR> NODE* p;<BR> int mid;<BR> if(low>high) return NULL;<BR> mid=(high+low)/2;<BR> p=(NODE *)malloc(sizeof(NODE));<BR> p->val=a[mid];<BR> p->lchild=build(a,low,mid-1);<BR> p->rchild=build(a,mid+1,high);<BR> return p;<BR>}<BR><BR>正常说来,应该用free(p),但是加在哪里好呢(在c里面)?我需要用p做返回值啊!(是不是太有点吹毛求疵乐,西西:)
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Norton AntivVirus 回复日期:2002-09-25 11:30:04
<br>内容:从哪里最后一次用完了,就free<BR><BR>如果你这样调用 NODE* ppp = build(.....);<BR>p->.............<BR><BR>用完了,<BR>就free(ppp);<BR><BR>OK?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天花乱追 回复日期:2002-09-25 11:34:58
<br>内容:可是return前不行,后面有执行不到啊?主程序里又没有定义
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:木子 回复日期:2002-09-25 11:36:29
<br>内容:定义一个结构体变量<BR>NODE n;<BR>n=*p;<BR>free(p);<BR>return n;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:TopLevel 回复日期:2002-09-25 11:37:30
<br>内容:函数调用完之后,此数据不用了。<BR>即可释放。<BR>你前面定义指针时要进行初始化。<BR><BR>FreeMem(NODE* p)<BR>{<BR> if ( p )<BR> {<BR> if ( p->lchild == NULL && p->rchild == NULL )<BR> {<BR> free( p );<BR> p = NULL;<BR> return;<BR> }<BR><BR> if ( p->lchild )<BR> {<BR> FreeMem( p->lchild );<BR> p->lchild = NULL;<BR> }<BR> <BR> if ( p->rchild )<BR> {<BR> FreeMem( p->rchild );<BR> p->rchild = NULL;<BR> } <BR> }<BR><BR> return;<BR>}<BR>2002-9-25 11:38:34
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -