有什么区别:双重删除,内存泄漏,删除堆栈内存?导致这些错误的条件是什么?我在参考这个测试的问题 5 时问这个问题。当涉及到这些东西时,我不太熟悉什么是好的做法和坏的做法,所以任何指南/提示都值得赞赏!
问问题
114 次
1 回答
1
引用的链接有一个测试,上面已经有答案,所以我认为进一步澄清测试的答案不会有助于作弊。
一个正确的程序总是会在每次调用 new 时只执行一次 delete 调用。所有这些事情都违反了这条规则。
双重删除多次调用删除。
A* p = new A;
if ( someOption )
delete p;
... more code ...
delete p; // p is double freed if someOption is true
return;
内存泄漏根本不会调用 delete。
A* p = new A;
if ( someOption )
delete p; // p leaked if someOption is not true
return;
并且删除堆栈内存调用删除不是从新返回的内存。
A a;
A* p;
if ( someOption )
p = &a;
else
p = new A;
delete p; // p is deletion of stack memory if someOption is true
于 2012-10-27T21:19:45.800 回答