При сборке с параметром -fsanitize=address я иногда вижу проблемы с доступом к памяти из классов libc++.
Ошибки не повторяются от запуска к запуску, а иногда вообще не возникают.
Что случилось? Как я могу предотвратить это?
При сборке с параметром -fsanitize=address я иногда вижу проблемы с доступом к памяти из классов libc++.
Ошибки не повторяются от запуска к запуску, а иногда вообще не возникают.
Что случилось? Как я могу предотвратить это?
«Если контейнеры libc++ переходят от инструментированного (перестроенного с помощью ASan) к неинструментальному коду, Address Sanitizer может сообщать о ложных срабатываниях переполнения контейнера».
Если ваша программа линкуется с библиотеками, созданными с помощью libc++ без ASAN, вам необходимо определить _LIBCXX_HAS_NO_ASAN
при сборке.
См. Почему Xcode определить _LIBCPP_HAS_NO_ASAN при создании сборки с очисткой адресов?
std::vector::operator[]
, но фактическим виновником является вызывающая сторона, которая отвечает за проверку собственных границ.
- person Matteo Italia; 21.10.2016