2017-11-13 249 views

cevap

3

Benim tahminim (eğer derleyici versiyonunu sunmadınız) Asan bunu sterilize edilemez böylece operator << dıştan uygulanan olmasıdır ve hatası (libandC++ ile Asan'ı yeniden kurmadıkça) algıla. Sadece yığın adresi tespitlerde, değil tahrip geçici dönüş değerlerine göre dönmek

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' yerine, örneğin' std :: string bar2 = bar; 'yazın. – vladon

+2

@vladon Bu çok farklı bir durum. Dize 16 karakterden uzun olduğu sürece benim için (yani, 'yığın-kullan-sonra-ücretsiz' raporlar) çalışır. Daha kısa bir dizi için SSO alırsınız, yani veri yığında tutulur, böylece Asan artık yığın hatalarını tespit edemez. – yugr