-2

有什么区别:双重删除,内存泄漏,删除堆栈内存?导致这些错误的条件是什么?我在参考这个测试的问题 5 时问这个问题。当涉及到这些东西时,我不太熟悉什么是好的做法和坏的做法,所以任何指南/提示都值得赞赏!

4

1 回答 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 回答