我有大量的内存分配,由于复杂的同步问题和其他便利,我只想让这个过程消失。
我不想写抑制文件。
是否有一些 C 代码可以发出信号以避免误报(不是真正的错误,而是不需要的)。我知道 valgrind 有一个 API,但没找到。
让 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;
}