我按照http://ewencumming.blogspot.cz/2012/02/list-processes-using-libproc.html上的示例来浏览 Linux 内核上正在运行的进程。但是我发现代码有泄漏:
#include <stdio.h>
#include <string.h>
#include <proc/readproc.h>
int main(int argc, char** argv)
{
// fillarg used for cmdline
// fillstat used for cmd
PROCTAB* proc = openproc(PROC_FILLARG | PROC_FILLSTAT);
proc_t proc_info;
// zero out the allocated proc_info memory
memset(&proc_info, 0, sizeof(proc_info));
while (readproc(proc, &proc_info) != NULL) { // <<!!!!!! here is the leak !!!!!!
// do something
}
closeproc(proc);
}
在循环中运行此代码(整个主代码)正在分配内存,但不会释放它。
根据 libproc 的源代码中的注释 freeproc() 应该在某处调用,但在任何地方调用它只会使应用程序崩溃(它应该在 readproc 缓冲区返回 NULL 时调用)。
如何正确释放 readproc 分配的内存?(该库是用 c 编写的,但我正在编写的代码是用 c++ 编写的,所以我同时标记了两者)