我後面的例子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