1

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;
}

プログラムの最後に dlsym によって割り当てられたバッファがまだあるため、Valgrind は動揺します。

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

これらのリソースを解放するにはどうすればよいですか? ありがとう

4

1 に答える 1

0

1 ブロックはまだ到達可能です

これらのブロックは問題ありません。心配する必要はありませ。リークではありません。ここには何もありません。先に進んでください。

あなたが気にするべきは「確実に失われる」ことです。

于 2012-04-26T02:50:47.200 に答える