我在代码中发现了一个内存泄漏问题。随着流程的触发,堆栈不断增长。
我的代码中有一个 while(1) 循环,它基本上在等待队列。
当来自 Web 服务的流程被触发时,会将传入的消息推送到队列中,并调用 C++ 中的方法,该方法接收消息并实现以图形形式呈现的流程。
每次触发时,我发现堆栈中的内存增加了 604KB。我需要解决这个问题。
我停止了服务 [在生产环境中运行的二进制文件]。
我使用 valgrind 启动了服务 [将二进制文件作为输入提供给 valgrind]。
我的代码中有一个 while(1) 循环,它基本上在等待队列。
当来自 Web 服务的流程被触发时,会将传入的消息推送到队列中,并调用 C++ 中的方法,该方法接收消息并实现以图形形式呈现的流程。
每次触发时,我发现堆栈中的内存增加了 604KB。我需要解决这个问题。
我停止了服务 [在生产环境中运行的二进制文件]。
我使用 valgrind 启动了服务 [将二进制文件作为输入提供给 valgrind]。
valgrind --log-file=/home/valgrind-output.txt --leak-check=full <service binary>
然而,当二进制程序运行时,它并不会显示任何泄漏,只有在停止服务后才会看到一些泄漏。但这些泄漏只出现一次,一旦我们重新启动服务[binary],它们就会被清除。
我故意在每个流程触发时,在进程开始时添加了一个分配。
int *p = new int[10];
我还添加了一个日志。每次触发流程时,我都会看到日志打印。但是我没有在输出文件中看到Valgrind给出的任何泄漏。
我该如何检查每次流程调用之间的泄漏?Valgrind只有在调用main函数结束时才显示泄漏吗?如何动态地检查我的代码在这种情况下造成了哪些泄漏。如果需要安装其他检测器,请建议。这将是极大的帮助。谢谢。