【发布时间】:2015-04-21 07:24:27
【问题描述】:
我们有一个庞大的应用程序,其中某些部分(线程)不会完全关闭,因此内存不会在析构函数中显式释放,因为它们从未被调用。因此,我正在使用 valgrind 测试应用程序,方法是使用 Ctrl + C(SIGINT) 命令中断进程,该命令以某种方式停止进程。 Valgrind 显示了很多泄漏(肯定也可能泄漏)。我正在使用以下选项运行 valgrind
valgrind --leak-check=full --log-file="valgrind5.out" -v ./MyProcess
我对此有两个问题
- 在 valgrind 输出中,我可以看到非常多的跟踪,并带有以下输出
==2833== 99 个块中的 3,330 字节肯定丢失在 34,381 的丢失记录 33,556 中 ==2833== 34,381 的丢失记录 33,557 中可能丢失了 58 个块中的 3,337 个字节
在这种情况下,当使用 SIGINT 停止进程时,我是否可以将“肯定丢失”视为内存泄漏?
- Valgrind 仅在进程停止后才会根据未初始化的变量转储有关泄漏和跳转的所有信息。我假设 valgrind 可以在运行时检测到“肯定丢失”的内存泄漏,并立即打印在控制台或 valgrind 日志文件上。假设错了吗?
【问题讨论】:
-
您需要在程序中捕获 sigint 才能调用关闭部分。
-
肯定丢失的是你的内存泄漏,这是没有任何指针指向的内存。可以通过您的野蛮阻止来解释偷窃可及。
-
@Ôrel 这是一个由许多开发人员处理的巨大应用程序,因此 SIGINT 在到达我们的应用程序之前就消失了,我们被强行杀死
标签: c++ memory-leaks valgrind