小编gpe*_*iva的帖子

valgrind --trace-children = yes报告泄漏,尽管atexit清理

我试图避免与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)

c static valgrind memory-leaks atexit

5
推荐指数
1
解决办法
633
查看次数

标签 统计

atexit ×1

c ×1

memory-leaks ×1

static ×1

valgrind ×1