【问题标题】:Need help troubleshooting source of memory leak - C++需要帮助排除内存泄漏源 - C++
【发布时间】:2019-10-11 03:30:06
【问题描述】:

我在这段代码中遇到了某种内存泄漏。虽然 is 实际上并没有抛出任何错误,但是当通过 Memcheck 运行时,它会检测到内存泄漏。

我还应该删除[]临时数组还是什么?

这是它发生的功能:

【问题讨论】:

  • 您的问题中缺少代码。
  • 当你edit你的问题是添加代码时,你也应该告诉我们你做了什么样的调试。我希望您已经在 Valgrind 或类似的检查器中运行了您的minimal reproducible example,并使用诸如 GDB 之类的调试器进行了调查。确保您也启用了全套编译器警告。这些工具告诉了你什么,它们缺少什么信息?并阅读 Eric Lippert 的 How to debug small programs。

标签: c++ memory-leaks


【解决方案1】:

每个内存分配都需要与一个释放配对。当这个函数结束时,newBinaryNum 指向的内存还没有被释放,该内存的地址也不会被保留在任何地方。因此,内存泄漏。

由于您没有为此BinaryNum 对象使用动态分配的任何好处,因此不要使用动态分配。只需将您的变量声明为BinaryNum newBinaryNum;。编译器不仅会处理此对象的内存需求,而且您的代码也将能够从return value optimization 中受益。

(另外,你应该更多地依赖标准库。你对binaryAry的操作模仿了std::vector的功能。为什么要重新发明轮子?你在这个函数中的重点应该是BinaryNum类,因此将内存管理细节委托给标准库。)

【讨论】:

  • 是的,我忘了说,因为这是一个分配,我们不允许使用 std::vector 等。我将如何释放 newBinaryNum,因为我需要该值直到它被返回?
  • @Bob 不要释放它。不要分配它。只需将其声明为本地对象,然后让编译器处理细节即可。
猜你喜欢
  • 2020-10-11
  • 1970-01-01
  • 2011-03-27
  • 2012-07-15
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 2016-10-14
相关资源
最近更新 更多