我如何明确提示 Valgrind 关于故意未释放的内存

问题描述 投票:0回答:1

我有大量的内存分配,由于复杂的同步问题和其他便利,我只想让这个过程消失。

我不想写抑制文件。

是否有一些 C 代码可以发出信号以避免误报(不是真正的错误,而是不需要的)。我知道 valgrind 有一个 API,但没找到。

c++ memory-leaks valgrind
1个回答
0
投票

让 valgrind 安静下来的一种简单方法是将“泄漏”的指针存储在进程生命周期的数据结构中,以便 valgrind 将它们报告为“仍然可达”而不是“肯定泄漏”。例如,在下面的代码中,我调用

IgnoreThisLeak(leakMe)
来防止 valgrind 抱怨我从未释放我的 100 字节分配:

#include <stdio.h>
#include <stdlib.h>

struct Node
{
   struct Node * _nextNode;
   void * _leakPtr;
};

static void IgnoreThisLeak(void * leakPtr)
{
   static struct Node * _tail = NULL;

   struct Node * n = malloc(sizeof(struct Node));
   n->_nextNode = _tail;
   n->_leakPtr  = leakPtr;
   _tail = n;
}

int main(int argc, char ** argv)
{
    int * leakMe = malloc(100);

    IgnoreThisLeak(leakMe);
    printf("leakMe=%p\n", leakMe);
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.