Bagikan melalui


Kesalahan: use-after-poison

Alamat Kesalahan Sanitizer: Penggunaan memori beracun

Pengembang dapat meracuni memori secara manual untuk menyesuaikan penelusuran kesalahan.

Contoh

// 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;
}

Untuk membuat dan menguji contoh ini, jalankan perintah ini di perintah Visual Studio 2019 versi 16.9 atau yang lebih baru:

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

Kesalahan yang dihasilkan

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

Baca juga

Gambaran umum AddressSanitizer
Masalah yang diketahui AddressSanitizer
Referensi bahasa dan build AddressSanitizer
Referensi runtime AddressSanitizer
Byte bayangan AddressSanitizer
AddressSanitizer cloud atau pengujian terdistribusi
Integrasi debugger AddressSanitizer
Contoh kesalahan AddressSanitizer