我后面的例子http://ewencumming.blogspot.cz/2012/02/list-processes-using-libproc.html为了浏览正在运行的进程在Linux内核上。但是我发现代码有泄漏:我怎样才能正确释放内存使用libproc
#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++中,所以我标记两者)
谢谢,只是为了更好地理解这一点,如果我真的在proc_info.cmdline上做了一个免费的工作,它是否也可以解决问题? – Petr
此外,我不知道你的代码是否正确,readproc()没有候选人只有一个参数,我想你的意思while(readproc(proc,proc_info)!= NULL)? – Petr
无论如何,使用readproc(proc,proc_info)总是把NULL放到proc_info :(它不工作... – Petr