Семантика памяти параметра dladdr() out

Какова семантика памяти dladdr()?

#define _GNU_SOURCE
#include <dlfcn.h>

int dladdr(void *addr, Dl_info *info);

typedef struct {
    const char *dli_fname;  /* Pathname of shared object that contains address */
    void       *dli_fbase;  /* Base address at which shared object is loaded */
    const char *dli_sname;  /* Name of symbol whose definition overlaps addr */
    void       *dli_saddr;  /* Exact address of symbol named in dli_sname */
} Dl_info;

Из прочтения страницы руководства неясно, dli_fname:

  • Указывает на постоянную строку и никогда не требует освобождения
  • Указывает на массив кучи, и пользователь отвечает за его удаление
  • Указывает на глобальный массив (вероятно, нет, поскольку он утверждает, что он повторно входим)

Я полагаю, тот же вопрос относится к dli_sname, но я подозреваю, что это действительно указывает на постоянную строку (сам символ).

Ответственен ли пользователь за удаление dli_fname вернулся dladdr()?

1 ответ

Решение

Эти строки действительны до тех пор, пока объект не будет выгружен через dlclose (прямо или косвенно).

В const char * означает, что струна не должна быть освобождена dladdr звонящий, потому что free ожидает void *, а не const void *.

Другие вопросы по тегам