Linux カーネルで実行中のプロセスを参照するために、 http://ewencumming.blogspot.cz/2012/02/list-processes-using-libproc.htmlの例に従いました。ただし、コードにリークがあることがわかりました。
#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 ++であるため、両方にタグを付けています)