Я хотел бы знать, как назвать эту функцию? И где я могу найти его реализацию, если у него нет имени?
extern void (*_malloc_message)(const char* p1, const char* p2, const char* p3, const char* p4);
Я хотел бы знать, как назвать эту функцию? И где я могу найти его реализацию, если у него нет имени?
extern void (*_malloc_message)(const char* p1, const char* p2, const char* p3, const char* p4);
Это не функция. Это выражение, в котором говорится, что _malloc_message
является указателем на функцию с возвратом типа void
и параметрами, указанными.
Чтобы использовать его, вам нужно назначить ему адрес функции с этой арностью, типом возврата и типами параметров.
Затем вы должны использовать _malloc_message
как если бы это была функция.
_malloc_message
- это указатель на функцию.
Где-то в коде вы найдете определение функции, прототип которой выглядит следующим образом:
void foo (const char* p1, const char* p2, const char* p3, const char* p4);
Затем вы назначаете функцию указателю на функцию :.
_malloc_message = foo;
и назовите его так:
(*_malloc_message)(p1, p2, p3, p4);
Вопрос в том, почему вы не можете напрямую вызвать foo. Одна из причин заключается в том, что вы знаете, что foo нужно вызывать только во время выполнения.
_malloc_message определяется в malloc.c jemalloc:
Вот как вы можете использовать это:
extern void malloc_error_logger(const char *p1, const char *p2, const char *p3, const char *p4)
{
syslog(LOG_ERR, "malloc error: %s %s %s %s", p1, p2, p3, p4);
}
//extern
_malloc_message = malloc_error_logger;
malloc_error_logger()
будет вызываться при различных ошибках библиотеки malloc. malloc.c имеет больше деталей.