Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kesalahan:
Kesalahan Pembersih Alamat: memcpy-param-tumpang tindih
Fungsi CRT memcpy
tidak mendukung memori yang tumpang tindih. CRT menyediakan alternatif untuk memcpy
yang mendukung memori yang tumpang tindih: memmove
.
Kesalahan umum adalah memperlakukan memmove
sebagai setara secara semantik dengan memcpy
.
Contoh
// example1.cpp
// memcpy-param-overlap error
#include <string.h>
__declspec(noinline) void bad_function() {
char buffer[] = "hello";
memcpy(buffer, buffer + 1, 5); // BOOM!
}
int main(int argc, char **argv) {
bad_function();
return 0;
}
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 /Oi
devenv /debugexe example1.exe
Bendera /Oi memberi tahu pengkompilasi untuk memperlakukan memcpy
dan memmove
sebagai fungsi intrinsik. Ini diperlukan karena beberapa versi penerapan pustaka memcpy
standar dan memmove
dengan cara yang sama. Karena ASAN adalah alat analisis dinamis, ASAN hanya mendeteksi kesalahan dengan efek runtime yang dapat diamati.
Kesalahan yang dihasilkan
Lihat 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