2

我觉得这必须是一个功能,但我的 Google-Fu 让我失望了。如果之前有人问过/回答过这个问题,我提前道歉,感觉很明显,但我找不到任何东西。

有没有办法将分配标记为故意泄漏?上下文是在程序初始化期间动态分配一次并在整个程序生命周期中使用的数据结构。没有真正的理由在程序终止之前释放所有分配的对象(为什么要清理房间,因为整个房子都有一个破坏球?),但它会导致 valgrind 的很多误报。

我知道我可以创建一个抑制文件,但感觉是手动的和断开的。我更喜欢某种宏或其他源内注释,这种分配是故意永远不会释放的(例如类似于malloc(...)->的东西malloc_IGNORE_LEAK(...))。valgrind 是否以某种方式支持这一点?

如果不是,那么标记/跟踪故意“泄漏”的首选解决方案是什么?

4

2 回答 2

0

下面的代码使用了一些全局变量和malloc(). 您可以将它用于任何您不担心从中泄漏内存的 malloc 调用。任何 malloced usingmy_malloc()都会显示在仍然可以访问的泄漏下,因为您仍然可以引用它。

void ** memorys = NULL;
size_t max_index = 0;
size_t use_index = 0;

void grow_memorys() {
    if (memorys == NULL) {
        max_index = 8;
        memorys = malloc(max_index * sizeof(void *));
    }
    else { 
        max_index *= 2;
        memorys = realloc(memorys, max_index * sizeof(void *));
    }
}   

void * my_malloc(size_t size) {
    void * point = malloc(size);
    if (use_index >= max_index) {
        grow_memorys();
    }
    memorys[use_index] = point;
    use_index++;
    return point;
}
于 2013-07-25T22:32:05.023 回答
0

您可以制作自己的包装器,该包装器为要释放的处理程序malloc注册“永久”分配。atexit但是,如果其他线程仍然可以使用它们,这在多线程程序中可能是不安全的。

于 2013-07-25T23:12:57.343 回答