std :: string_view для временной строки — поймать ASan

Это висячий указатель | справочный пример:

#include <string>
#include <string_view>
#include <iostream>

std::string foo() {
return "test";
}

int main() {
std::string_view bar = foo(); // bar is pointed to destructed string
std::cout << bar << std::endl;
}

Обеззараживатель адреса не может поймать это, по крайней мере с параметрами по умолчанию.
Можно ли отловить такие ошибки с помощью адресного дезинфицирующего средства?

UPD.

Сообщил об этой ошибке:

16

Решение

Я думаю (вы не предоставили версию компилятора), что operator << реализован внешне, поэтому Asan не может очистить его и обнаружить ошибку (если вы не перекомпилируете libstdc ++ с Asan). Вот что я получу с моим GCC 6.2 (я немного изменил репро, так как у меня нет доступа к c++1z):

  call    operator delete(void*)
.L17:
movq    %rbx, %rsi
movl    std::cout, %edi
call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
call    std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]