C ++中的内存分配和删除

时间:2012-10-27 19:52:47

标签: c++ pointers memory-management

双重删除,内存泄漏和堆栈内存删除有什么区别?造成这些错误的条件是什么?我在提到问题5 on this test时提出这个问题。对于这些东西,我不太熟悉什么是良好的练习与不良练习,所以任何指导/提示都会受到赞赏!

1 个答案:

答案 0 :(得分:1)

引用的链接有一个已经有答案的测试,所以我不认为进一步澄清测试的答案会有助于作弊。

对于每次调用new,正确的程序总是会执行一次删除调用。所有这些都违反了这条规则。

双重删除调用多次删除。

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;

删除堆栈内存调用删除未从new返回的内存。

A a;

A* p;
if ( someOption )
    p = &a;
else
    p = new A;

delete p;    // p is deletion of stack memory if someOption is true