2017-11-13 12 views

답변

3

내 생각은 (당신이 컴파일러 버전을 제공하지 않은 경우) 아산을 소독 할 수 있도록 operator << 외부에 구현되어 있으며 (당신이 libstdC++을 Asan으로 다시 빌드하지 않는다면) 오류를 감지하십시오. 단지 스택 주소 탐지가 아닌 파괴의 임시 반환 값으로 반환

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> >&) 
+0

'std :: cout << bar'를 예를 들어'std :: string bar2 = bar;'로 대체하십시오. – vladon

+2

@vladon 이것은 매우 다른 상황입니다. 문자열이 16자를 초과하는 한 나를 위해 작동합니다 (즉,'heap-after-after-free'를보고합니다). 짧은 문자열의 경우 SSO를 얻습니다. 즉, 데이터가 스택에 보관되므로 Asan은 더 이상 힙 오류를 감지 할 수 없습니다. – yugr