C++ 使用SIGINT停止进程时的Valgrind输出
我们有一个巨大的应用程序,其中一些部分(线程)没有完全关闭,因此在析构函数中没有显式释放内存,因为它们从未被调用。因此,我使用valgrind测试应用程序,方法是使用Ctrl+C(SIGINT)命令中断进程,该命令以某种方式停止进程。Valgrind显示出大量泄漏(肯定和可能泄漏)。我正在使用以下选项运行valgrindC++ 使用SIGINT停止进程时的Valgrind输出,c++,memory-leaks,valgrind,C++,Memory Leaks,Valgrind,我们有一个巨大的应用程序,其中一些部分(线程)没有完全关闭,因此在析构函数中没有显式释放内存,因为它们从未被调用。因此,我使用valgrind测试应用程序,方法是使用Ctrl+C(SIGINT)命令中断进程,该命令以某种方式停止进程。Valgrind显示出大量泄漏(肯定和可能泄漏)。我正在使用以下选项运行valgrind valgrind --leak-check=full --log-file="valgrind5.out" -v ./MyProcess 关于这一点,我有两个问题 在valg
valgrind --leak-check=full --log-file="valgrind5.out" -v ./MyProcess
关于这一点,我有两个问题
在这种情况下,当使用SIGIN停止进程时,是否可以考虑“绝对丢失”作为内存泄漏?
您还可以开始更多地使用unique_ptr和shared_ptr,以便自动释放内存。还可以将内容包装到类中,例如,确保析构函数释放内存并关闭文件句柄。您需要在程序中捕获sigint以调用关机部分。内存泄漏肯定会丢失,这是没有指针指向的内存。Steal-reachable可以用您的野蛮停止来解释。@Ôrel这是一个由许多开发人员处理的大型应用程序,因此SIGINT在到达我们的应用程序之前就消失了,我们被迫停止更新。由于我们的代码库很大,由许多具有不同技能的开发人员开发,并且滥用C++11(如lambdas),即使使用unique_ptr和shared_ptr,也会产生一些问题,例如访问无效内存。不过,我很想知道shared_ptr中的这种情况?根据定义,当至少有一个这样的ptr时,它们不会释放内存。如果您只想监视内存,而不想阻止其释放,那么可以将其与弱_ptr结合使用。在这种情况下,当释放内存时,指针将重置为null。我观察到的一个问题是在异步执行的lambda中通过引用传递shared_ptr。所以,当lambda被调用时,由shared_ptr指向的对象不再存在