📄 subject_26972.htm
字号:
<p>
序号:26972 发表者:沐秋 发表日期:2003-01-07 11:00:06
<br>主题:delete[] p();的用法大家看看可行吗?
<br>内容:从别的论坛看到这样一个问题讨论一下<BR>void p()<BR>{<BR> int *a = new int [10];<BR> ...<BR> ...<BR> ...<BR> return a;<BR>}<BR>中间没有delete,a的内存在函数调用结束时会不会释放?按照这个函数来看好像释放了a就不能return了,怎么办?请先告诉我第一个问题,谢谢<BR><BR>回复:不会释放.<BR>void* p()<BR>{<BR> int *a = new int [10];<BR> ...<BR> ...<BR> ...<BR> return a;<BR>}<BR>delete[] p();<BR>大家觉得这样可行吗?是不是很有意思<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:沐秋 回复日期:2003-01-07 11:13:18
<br>内容:我测试了一下程序通过了,但是我不知道是不是真的内存被释放了,高手指点一下,我该怎么验证这一点呢?<BR>#include "stdafx.h"<BR>#include "iostream.h"<BR>#include "string.h"<BR>char* p()<BR>{<BR> char *string = new char[10];<BR> strcpy(string,"qwwer");<BR> return string;<BR>}<BR>int main(int argc, char* argv[])<BR>{ <BR> cout<<p()<<endl;<BR> delete[] p();<BR> return 0;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-01-07 14:27:06
<br>内容:int main(int argc, char* argv[])<BR>{ <BR> cout<<p()<<endl; //此p()调用返回的结果没释放<BR> delete[] p(); //这已经是又一次调用了(每次调用都分配了内存)<BR> return 0;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:(zl剑客) 回复日期:2003-01-07 17:24:02
<br>内容:tjhe说的很对<BR>你只是做了一个多余的工作<BR>原来调用函数分配的内存块在堆<BR>中并没有释放!每次调用P函数时,就在<BR>堆中分配一块新的空间!这样导致泄露越来越大?!<BR><BR>你可以定义一个全局的 char *global;<BR>在函数中 global = string;<BR>这样就保存了内存块的地址<BR>在程序结束时,调用 delete global;<BR>就可以解决内存泄露了!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:沐秋 回复日期:2003-01-07 19:06:20
<br>内容:谢谢二位
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浩公 回复日期:2003-01-07 20:50:03
<br>内容:老实说,那个程序有点那个,这样返回指针不好,<BR>一般都是传入指针。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:巴巴罗沙 回复日期:2003-01-07 20:54:24
<br>内容:tjhe说的对,我做了一个测试,发现每一次调用,p函数中a变量的地址都不一样,应该是每次调用函数都重新分配了内存所致。只不过没学过编译原理,有些概念不能深刻理解,郁闷中。<BR>----------------------<BR>编译是我的下一个目标
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-01-08 10:34:16
<br>内容:这种函数一般要少用(如浩公所言),非要编写这种函数,通常都有特别说明为函数调用者负责释放(函数调用多了更多责任)。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -