Fehler: memcpy-param-overlap
Adressbereinigungsfehler: memcpy-param-overlap
Die CRT-Funktion memcpy
unterstützt keinen überlappenden Speicher. Das CRT bietet eine Alternative, die memcpy
überlappenden Speicher unterstützt: memmove
.
Ein häufiger Fehler besteht darin, semantisch zu behandeln memmove
, wie memcpy
es semantisch gleichbedeutend ist.
Beispiel
// 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;
}
Führen Sie zum Erstellen und Testen dieses Beispiels die folgenden Befehle in einer Visual Studio 2019,16.9- oder höher-Entwickler-Eingabeaufforderung aus:
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
Das Flag "/Oi" weist den Compiler an, systeminterne Funktionen zu behandeln und memmove
als systeminterne Funktionen zu behandelnmemcpy
. Dies ist erforderlich, da einige Versionen der Standardbibliothek auf die gleiche Weise implementieren und memmove
auf die gleiche Weise.memcpy
Da ASAN ein dynamisches Analysetool ist, erkennt es nur Fehler mit einem feststellbaren Laufzeiteffekt.
Resultierender Fehler
Weitere Informationen
AddressSanitizer -Übersicht
Beheben bekannter Probleme mit demSanitizer
AddressSanitizer Build- und Sprachreferenz
AddressSanitizer-Laufzeitreferenz
AddressSanitizer-Schattenbytes
AddressSanitizer-Cloud oder verteilte Tests
AddressSanitizer Debugger-Integration
Beispiele für AddressSanitizer-Fehler
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für