AddressSanitizer: переполнение стека при ошибке адреса?

Итак, я сделал функцию для обращения к связанному списку с помощью рекурсии. Моя обратная функция работает отлично, но когда я пытаюсь запустить asan на своем исполняемом файле, она выдает ошибку переполнения стека по определенному адресу в обратной функции. Я перепробовал все, чтобы это исправить. Я попытался сделать все переменные в стеке NULL после того, как их работа сделана. Я удалил всю память из кучи. Я запустил valgrind для файла, и он говорит мне, что вся память была освобождена, и нет утечки. Что я делаю?

AddressSanitizer: переполнение стека

PS Я использую компилятор clang++ в C++.

1 ответ

Решение

ASAN увеличивает ваши требования к памяти, поскольку он вставляет значения часового в стек. Таким образом, возможно, вы не достигли предела стека в обычном режиме, но теперь у вас включен ASAN, поскольку каждый рекурсивный вызов теперь использует больше места в стеке, чем было раньше.

Лучшее, что можно сделать в C++, - это не делать так глубоко, но вы также можете увеличить пределы стека вашего процесса, например, в bash:

ulimit -s unlimited

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