我试图避免与Valgrind的误报,但我用的组合吸atexit()并fork(),尽管使用--trace-children=yes.我的代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
static int * arr;
static void cleanup() {
free(arr);
printf("free arr as: %p\n", (void *)arr);
}
int main()
{
arr = malloc(16 * sizeof(int));
printf("allocated arr as: %p\n", (void *)arr);
atexit(cleanup);
pid_t pid = fork();
if (pid == -1) {
exit(1);
} else if (pid == 0) {
// child
_exit(0);
} else {
// parent
exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
命令行:
$ clang -Weverything leak.c
$ valgrind --trace-children=yes …Run Code Online (Sandbox Code Playgroud)