作为malloc包装器,我使用以下经典代码片段:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdint.h>
#include <dlfcn.h>
void* malloc(size_t size)
{
static void* (*real_malloc)(size_t) = NULL;
if (!real_malloc)
real_malloc = dlsym(RTLD_NEXT, "malloc");
void *p = real_malloc(size);
fprintf(stderr, "malloc(%d) = %p\n", size, p);
return p;
}Valgrind感到不安,因为在程序结束时,dlsym仍然分配了缓冲区。
==32691== 32 bytes in 1 blocks are still reachable in loss record 1 of 1
==32691== at 0x4C279FC: calloc (vg_replace_malloc.c:467)
==32691== by 0x528559F: _dlerror_run (dlerror.c:142)
==32691== by 0x5285099: dlsym (dlsym.c:71)
==32691== by 0x4060BC: malloc (memory.c:222)我如何释放这些资源?谢谢
发布于 2012-04-26 10:50:47
1数据块仍可访问
这些区块很好。你不用担心他们,他们不是泄密的。这里没什么可看的,继续往前走。
这是你应该关心的“绝对迷失”。
https://stackoverflow.com/questions/9774896
复制相似问题