gpt4 book ai didi

c - Valgrind 标记故意泄露

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:59 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

下面的代码在 malloc() 上使用了一些全局变量和包装器。您可以将它用于任何您不担心从中泄漏内存的 malloc 调用。使用 my_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;
}

关于c - Valgrind 标记故意泄露,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17868423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com