作者saxontai (黑暗,点缀孤零零的星)
看板C_and_CPP
标题Re: [问题] C++ 用new动态配置记忆体之後无法用del …
时间Thu Mar 19 00:23:52 2009
※ 引述《zptdaniel ()》之铭言:
: http://rafb.net/p/fzOZWw61.html
: 这是C++ primer plus当中的一题练习题
: 我在set()当中使用new动态配置记忆体之後
: 应该要在main的最後把先前配置的记忆体delete掉
: 但我只要加上 delete [] pt; 就没办法正常结束执行
: 请问版上的高手们是我的语法用错了吗?
: 谢谢!
char* set(stringy &s1,char *s2)
{
int n;
for(n=0;s2[n]!='\0';n++);
char *ps = new char[n+1];
ps = s2;
s1.str = ps;
s1.str[n+1]='\0';
s1.ct = strlen(s2);
cout<<"Length of strigny.ct is:"<<s1.ct<<endl;
return ps;
}
上色的两行,ps 刚得到 new 所配置的记忆体的位址,
你又马上把该指标指向函式的引数 s2,这造成 memory leak。
然後最後 set 所回传的其实是 main() 中的 char testing[] = "...."; 的位址。
main() 中的 pt 是指向 testing。
於是最後的 delete [] pt 是对"非经由动态配置而来的记忆体"做释放,那就当了。
--
Need Help With Women? Can UNIX Help?
$> man woman
$> Segmentation fault (core dumped)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 116.59.50.193
1F:→ zptdaniel:谢谢!!我懂了! 03/19 00:38