Объяснение
malloc может вернуть NULL; realloc при неудаче оставляет старый блок действительным. Sanitizers обнаруживают многие ошибки памяти в выполненных путях, но не доказывают отсутствие всех дефектов.
Задача для самостоятельного решения
Почему p=realloc(p,n) может потерять память при неудаче?
Показать разбор ответа
NULL перезапишет единственную ссылку на старый блок. Сначала сохраните результат во временный указатель и заменяйте p только после проверки успеха.