Переопределение ‘malloc’ с использованием механизма LD_PRELOAD
Как может LD_PRELOAD
быть использованы для установки ptr
на NULL или на любой другой адрес памяти, чтобы избежать использования висячих указателей.
void free(void *ptr)
{
real_free(ptr);
ptr = NULL // will only set local ptr to NULL
}
Это не может.
С LD_PRELOAD вы можете переопределять символы, такие как функция. Чтобы изменить указатель, переданный в free (), вам потребуется доступ к переменной вызывающей стороны free (), чтобы установить его в NULL. Но у вас есть доступ только к копии переданного указателя.
Обратите внимание, что вызывающая сторона может даже сделать что-то вроде:
free(do_something());
В этом случае нет переменной для установки в NULL
Других решений пока нет …