Что означают числа (p c 0x555ac6680ead bp 0x7ffc9d3ce920 sp 0x7ffc9d3ce910 T0)?
Во время cra sh (которое было вызвано попыткой доступа к адресу 0x7f56b3ba0c20
), значения счетчика программы (P C), регистров указателя кадра (BP) и указателя стека (SP) были 0x555ac6680ead
, 0x7ffc9d3ce920
и 0x7ffc9d3ce910
соответственно.
Программа значение счетчика соответствует функции std::_Sp_counted_base<...>::_M_release()
.
Мы не знаем, откуда пришел аварийный адрес 0x7f56b3ba0c20
. Он не находится рядом с указателем текущего стека и не выглядит как адрес кучи (хотя это может быть), а также не выглядит как случайный мусор. ASan не имеет ни малейшего представления, откуда поступил этот адрес.
Одно из возможных объяснений: адрес находился в куче, затем он был удален и перемещен в карантин (который ASan использует, чтобы сообщить вам о висячем доступе), но затем карантин емкость был превышен другими delete
с, из-за чего ASan «забыл» то, что знал об этом адресе (ASan не может вечно хранить информацию о каждом удаленном блоке памяти - это может привести к запуску Недостаточно памяти).
Можно попытаться увеличить размер карантинного буфера ASan с помощью:
ASAN_OPTIONS=quarantine_size_mb=4096
(по умолчанию 256, увеличивайте до тех пор, пока не закончится память или пока ASan не сообщит, что вы на самом деле получаете доступ к висячей памяти).