【发布时间】:2013-01-10 18:59:52
【问题描述】:
我创建了一个对象,它有几个整数变量,一个 char 内存块说它分配了 300-500 字节的内存作为其成员。之后这个对象被一个线程推入向量,然后另一个并行运行的线程将与一个空向量交换并开始处理包含该对象的向量,在处理后我曾经删除对象中使用的字符块和还完成了对象并删除了对象。但似乎内存没有释放。我用 valgrind 工具运行了这段代码,它没有显示任何泄漏。请帮我解决一下
【问题讨论】:
-
如果您在 valgrind 中运行它并且它没有显示任何内存泄漏,那么您为什么假设您正在泄漏内存?这个假设的依据是什么?顺便说一句,
delete不会释放任何内存,它会将内存块标记为空闲以供重新使用。 -
程序执行完成后,该应用程序使用的内存不会减少。即,在通过运行 top 命令执行程序时,我发现我使用 500 MB 的 RAM 编写的应用程序在执行后应该立即下降,但它没有这样做
-
您似乎正在使用任务管理器来跟踪内存使用情况。它并没有真正达到目的,也不是跟踪内存泄漏的正确方法。如果 valgrind 报告没有内存泄漏,请确保您没有。
标签: c++ memory-management memory-leaks valgrind delete-operator