【问题标题】:Memory allocation and deletion in C++ [closed]C ++中的内存分配和删除[关闭]
【发布时间】:2012-10-27 19:52:46
【问题描述】:

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

【问题讨论】:

  • 这些都不是好的做法。如果您正在参加考试,也许我们不应该为您回答这些问题。
  • "in C" - 但问题被标记为“C++”。现在呢?
  • 好像你正在接受你的知识测试,你什么都不知道所以应该通过测试!
  • 老是作弊,做好就当销售部经理,学了就是普通呆伯特。

标签: c++ pointers memory-management


【解决方案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;

堆栈内存的删除调用delete对未从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

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 2014-06-28
    • 2017-07-06
    • 2015-01-18
    • 2015-02-11
    • 2016-04-23
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多