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 : incompatibilité entre les API d’allocation et de désallocation
Remarques
Active la détection du runtime des opérations de mémoire incompatibles susceptibles d’entraîner un comportement non défini, par exemple :
-
mallocdoit être associé àfree, nondeleteoudelete[]. -
newdoit être associé àdelete, nonfreeoudelete[]. -
new[]doit être associé àdelete[], nondeleteoufree.
Dans Windows, alloc-dealloc-mismatch la détection des erreurs est désactivée par défaut. Pour l’activer, définissez la variable set ASAN_OPTIONS=alloc_dealloc_mismatch=1 d’environnement avant d’exécuter votre programme.
Exemple
// example1.cpp
// Demonstrate alloc-dealloc-mismatch error
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
if (argc != 2) return -1;
switch (atoi(argv[1]))
{
case 1:
delete[](new int[10]);
break;
case 2:
delete (new int[10]); // Boom!
break;
default:
printf("arguments: 1: no error 2: runtime error\n");
return -1;
}
return 0;
}
Dans une invite de commandes développeur Visual Studio 2019 version 16.9 ou ultérieure, exécutez les commandes suivantes pour voir un exemple de alloc_dealloc_mismatch:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Sortie
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