C++ Valgrind 会将剩余的分配内存检测为泄漏吗?
C++ Will Valgrind detect leftover allocated memory as leaked?
我正在使用 C++ 编写一个程序,该程序需要我使用 new 分配的动态内存。我有一个用户可以关闭程序的情况,但我没有包括删除所有剩余内存。
注意:此内存由关闭时全部存在的对象指针列表跟踪,因此没有内存“丢失”。
如果我在关闭前不清理数组,valgrind 是否会认为剩余内存是泄漏内存?
另一个问题是,如果我 /do/ 循环我的对象数组并在程序关闭前删除所有内存,Valgrind 是否能够确定是否有任何内存泄漏?
编辑
我确实循环并释放了所有内存,现在 Valgrind 说我没有泄漏。这可信吗?
如果你泄漏内存,你就会泄漏内存,valgrind 会(通常)检测并报告它。保持指针直到程序终止还不够好(说服 valgrind)。如果你真的、真的需要做那样的事情,你可以使用 "pool"(例如 Boost.Pool
)来分配,然后在你的程序结束时立即释放整个池。
既然你已经说过你有一个循环删除所有内容的解决方案,那就太好了。就这样吧。如果您在关闭时遇到性能问题,请考虑池方法。
我正在使用 C++ 编写一个程序,该程序需要我使用 new 分配的动态内存。我有一个用户可以关闭程序的情况,但我没有包括删除所有剩余内存。
注意:此内存由关闭时全部存在的对象指针列表跟踪,因此没有内存“丢失”。
如果我在关闭前不清理数组,valgrind 是否会认为剩余内存是泄漏内存?
另一个问题是,如果我 /do/ 循环我的对象数组并在程序关闭前删除所有内存,Valgrind 是否能够确定是否有任何内存泄漏?
编辑
我确实循环并释放了所有内存,现在 Valgrind 说我没有泄漏。这可信吗?
如果你泄漏内存,你就会泄漏内存,valgrind 会(通常)检测并报告它。保持指针直到程序终止还不够好(说服 valgrind)。如果你真的、真的需要做那样的事情,你可以使用 "pool"(例如 Boost.Pool
)来分配,然后在你的程序结束时立即释放整个池。
既然你已经说过你有一个循环删除所有内容的解决方案,那就太好了。就这样吧。如果您在关闭时遇到性能问题,请考虑池方法。