【问题标题】:C++ Will Valgrind detect leftover allocated memory as leaked?C++ Valgrind 会检测到剩余分配的内存泄漏吗?
【发布时间】:2016-03-20 15:45:31
【问题描述】:

我正在使用 C++ 编写一个程序,该程序需要我使用 new 分配的动态内存。我有一种情况,用户可以关闭程序,但我没有包括删除所有剩余内存。

注意:此内存由在关闭时全部存在的对象指针列表跟踪,因此不会丢失任何内存。

如果我在关闭之前不清理数组,valgrind 会认为剩余内存是泄漏内存吗?

另一个问题是,如果我 /do/ 循环遍历我的对象数组并在程序关闭之前删除所有内存,Valgrind 是否能够确定是否有任何内存泄漏?

编辑

我确实循环并释放了所有内存,现在 Valgrind 说我没有泄漏。这可以信任吗?

【问题讨论】:

  • 如果您手动分配内存,则必须手动删除它(除非使用智能指针)。我删除了 C 标签。

标签: c++ memory-leaks valgrind dynamic-memory-allocation


【解决方案1】:

如果你泄漏内存,你就会泄漏内存,valgrind(通常)会检测并报告它。保持指针直到程序终止还不够好(说服 valgrind)。如果你真的真的需要做这样的事情,你可以改用“池”(例如Boost.Pool)来分配,然后在程序结束时立即释放整个池。

既然您已经说过您有一个可以循环并删除所有内容的解决方案,那太好了。保持这种状态。如果您在关闭时遇到性能问题,请考虑使用池方法。

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多