【问题标题】:What is the important memory allocation flaw that is seen here? [closed]这里看到的重要内存分配缺陷是什么? [关闭]
【发布时间】:2012-07-10 08:52:40
【问题描述】:

其实这是我得到的作业。但我不知道答案。谁能帮帮我?

在以下 C++ 代码中看到的重要内存分配缺陷是什么?如何避免?

void testFunction(){
   int * p = new int(5);
   cout << p << *p << &p << endl;
}

【问题讨论】:

  • 你显然没有为此付出任何努力。如果您花 10 秒时间在 google 中输入“C++ new”,您会立即找到关于为每个对应的 new 设置一个 delete 并为每个对应的 new[] 设置一个 delete[] 并且不要混合它们的建议。缺少作业标签。作业需要你付出一些努力,而不是简单地转发问题。
  • @Preet 无需花费“那 10 秒”。我知道每个新的都需要删除,每个新的 [] 都需要删除 []。但这里的问题是我不明白这个问题。感谢 Luchian Grigore,我只有在阅读了他的回答后才正确理解了这个问题。关于“作业”标签;当我最近加入这里时,我不知道有一个“作业”标签。无论如何感谢您的信息
  • 我认为,如果您已经“了解”newdelete,您还会调查它们在语法之外的实际作用,并对它们的功能(堆分配),因此堆分配与堆栈分配/自动变量在使用和要求方面有何不同。不妨在这里补充一点,在实际的 C++ 中,您几乎永远不会拥有像问题中那样的函数(如果您需要在调用范围内修改它,您可以使用堆栈变量或通过引用或指针传递一个值,或者如果您只想打印,则按值传递)

标签: c++ memory-management


【解决方案1】:

内存永远不会被释放,所以你有内存泄漏。您可以通过删除指针来解决此问题:

void testFunction(){
   int * p = new int(5);
   cout << p << *p << &p << endl;
   delete p;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多