Błąd: use-after-poison

Błąd narzędzia do oczyszczania adresu: użycie zatrutej pamięci

Deweloper może ręcznie zatruć pamięć w celu dostosowania debugowania.

Przykład

// example1.cpp
// use-after-poison error
#include <stdlib.h>

extern "C" void __asan_poison_memory_region(void *, size_t);

int main(int argc, char **argv) {
    char *x = new char[16];
    x[10] = 0;
    __asan_poison_memory_region(x, 16);

    int res = x[argc * 10];              // Boom!
 
    delete [] x;
    return res;
}

Aby skompilować i przetestować ten przykład, uruchom następujące polecenia w wierszu polecenia dewelopera Visual Studio 2019 w wersji 16.9 lub nowszej:

cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe

Wynikowy błąd

Screenshot of debugger displaying use-after-poison error in example 1.

Zobacz też

Omówienie narzędzia AddressSanitizer
Rozwiązywanie znanych problemów z rozwiązaniemSanitizer
Dokumentacja języka i kompilacji narzędzia AddressSanitizer
AddressSanitizer runtime reference (Dokumentacja środowiska uruchomieniowego narzędzia AddressSanitizer)
Bajty cienia addressSanitizer
AddressSanitizer cloud or distributed testing (Testowanie rozproszone lub chmura AddressSanitizer)
Integracja debugera AddressSanitizer
Przykłady błędów narzędzia AddressSanitizer