Erreur : memcpy-param-overlap
Erreur d’assainissement de l’adresse : memcpy-param-chevauchement
La fonction memcpy
CRT 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
.
Exemple
// 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
L’indicateur /Oi indique au compilateur de traiter memcpy
et memmove
de servir de fonctions intrinsèques. Cela est nécessaire, car certaines versions de la bibliothèque standard implémentent memcpy
et memmove
de la même façon. Comme ASAN est un outil d’analyse dynamique, il détecte uniquement les erreurs avec un effet d’exécution observable.
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