2012-03-19 4 views
1

В качестве таНоса обертки, я использую этот классический фрагмент кода:Очистка функции взаиморасположение с dlsym

#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) 

Как я могу освободить эти ресурсы? Благодаря

+1

Возможно, мне что-то не хватает, и я не знаю, можно ли даже освободить этот буфер, но я бы просто проигнорировал его. Буфер dlsym будет выпущен, когда программа выйдет, и вам это нужно, пока программа запущена. –

+0

Меня это тоже не беспокоит, мне просто интересно. – ziu

+0

Хорошо. Вы называете dlclose? Остается ли этот буфер? –

ответ

0

1 блоки все еще достижимы

Эти блоки просто отлично. Вам не нужно беспокоиться о них, это не утечки. Здесь нечего видеть, двигаться вперед.

Это «определенно потерянный», о котором вы должны заботиться.