Семантика памяти параметра 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 *
.