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
Opmerkingen
Note
De /Oi vlag is vereist om fouten betrouwbaar te detecteren memcpy-param-overlap . Deze vlag vertelt de compiler dat deze als intrinsiek moet worden behandeld memcpy en andere functies, wat nodig is omdat sommige versies van de standaardbibliotheek ze als zodanig implementeren. Omdat ASan een hulpprogramma voor dynamische analyse is, kunnen alleen fouten worden gedetecteerd met een waarneembaar runtime-effect. Houd er rekening mee dat wanneer /O2 ook is ingesteld, ASan mogelijk niet betrouwbaar fouten kan detecteren memcpy-param-overlap omdat de intrinsieke variant van deze functies niet gegarandeerd kan worden gebruikt. Zie documenten voor meer informatie/Oi.
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.
Example
// 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
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