Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Erreur :
Erreur d’assainissement de l’adresse : memcpy-param-chevauchement
Remarques
Note
L’indicateur /Oi est nécessaire pour détecter de manière fiable les memcpy-param-overlap erreurs. Cet indicateur indique au compilateur de traiter memcpy et d’autres fonctions comme des intrinsèques, ce qui est nécessaire, car certaines versions de la bibliothèque standard les implémentent comme telles. Étant donné qu’ASan est un outil d’analyse dynamique, il ne peut détecter les erreurs qu’avec un effet d’exécution observable. Notez que quand /O2 elle est également définie, ASan peut ne pas être en mesure de détecter de manière fiable les memcpy-param-overlap erreurs, car la variante intrinsèque de ces fonctions n’est pas garantie d’être utilisée. Pour plus d’informations, consultez /Oi la documentation.
La fonction memcpyCRT ne prend pas en charge le chevauchement de la mémoire. Le CRT offre une alternative à memcpy celle qui prend en charge la mémoire qui se chevauche : memmove.
Une erreur courante consiste à traiter memmove comme étant sémantiquement équivalent à 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;
}
Pour générer et tester cet exemple, exécutez ces commandes dans une invite de commandes développeur Visual Studio 2019 version 16.9 ou ultérieure :
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
Erreur résultante
Voir aussi
Vue d’ensemble de AddressSanitizer
Résoudre les problèmes connus liés à AddressSanitizer
Référence de build et de langage AddressSanitizer
Informations de référence sur le runtime AddressSanitizer
Octets d’ombre AddressSanitizer
Test cloud ou distribué AddressSanitizer
Intégration du débogueur AddressSanitizer
Exemples d’erreur AddressSanitizer