Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Fout:
Adres opschoningsfout: memcpy-param-overlap
De functie memcpy
CRT biedt geen ondersteuning voor overlappend geheugen. De CRT biedt een alternatief voor memcpy
dat ondersteuning biedt voor overlappend geheugen: memmove
.
Een veelvoorkomende fout is om te behandelen memmove
als semantisch equivalent aan memcpy
.
Voorbeeld
// 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;
}
Als u dit voorbeeld wilt bouwen en testen, voert u deze opdrachten uit in een Opdrachtprompt voor ontwikkelaars van Visual Studio 2019 versie 16.9 of hoger:
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
De vlag /Oi vertelt de compiler om intrinsieke functies te behandelen memcpy
en memmove
als intrinsieke functies. Dit is nodig omdat sommige versies van de standaardbibliotheek op dezelfde manier worden geïmplementeerd memcpy
en memmove
op dezelfde manier. Omdat ASAN een hulpprogramma voor dynamische analyse is, detecteert het alleen fouten met een waarneembaar runtime-effect.
Resulterende fout
Zie ook
Overzicht van AddressSanitizer
AddressSanitizer bekende problemen
AddressSanitizer-build- en taalreferenties
naslaginformatie over AddressSanitizer-runtime
addressSanitizer schaduwbytes
AddressSanitizer-cloud of gedistribueerde tests
integratie van AddressSanitizer-foutopsporingsprogramma's
voorbeelden van AddressSanitizer-fouten