Hata: memcpy-param-overlap
Adres Temizleme Hatası: memcpy-param-overlap
CRT işlevi memcpy
çakışan belleği desteklemez . CRT, çakışan belleği destekleyen bir alternatif memcpy
sağlar: memmove
.
Yaygın bir hata, ile eşanlamlı olarak ele memmove
almaktır memcpy
.
Örnek
// 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;
}
Bu örneği derlemek ve test etmek için visual studio 2019 sürüm 16.9 veya sonraki bir geliştirici komut isteminde şu komutları çalıştırın:
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
/Oi bayrağı derleyiciye ve memmove
iç işlevleri olarak davranmasını memcpy
söyler. Standart kitaplığın bazı sürümleri ve memmove
aynı şekilde uygulandığından memcpy
bu gereklidir. ASAN dinamik bir analiz aracı olduğundan, yalnızca gözlemlenebilir çalışma zamanı etkisi olan hataları algılar.
Sonuçta oluşan hata
Ayrıca bkz.
AddressSanitizer'a genel bakış
AddressSanitizer bilinen sorunları
AddressSanitizer derlemesi ve dil başvurusu
AddressSanitizer çalışma zamanı başvurusu
AddressSanitizer gölge baytları
AddressSanitizer bulut veya dağıtılmış test
AddressSanitizer hata ayıklayıcısı tümleştirmesi
AddressSanitizer hata örnekleri