Aracılığıyla paylaş


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

Örnek 1'de memcpy-param-overlap hatasını görüntüleyen hata ayıklayıcının ekran görüntüsü.

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