Erreur : alloc-dealloc-mismatch
Erreur d’assainissement de l’adresse : incompatibilité entre les API d’allocation et de désallocation
La alloc
/dealloc
fonctionnalité d’incompatibilité dans AddressSanitizer est désactivée par défaut pour Windows. Pour l’activer, exécutez-le set ASAN_OPTIONS=alloc_dealloc_mismatch=1
avant d’exécuter le programme. Cette variable d’environnement est case activée au moment de l’exécution pour signaler des erreurs sur malloc
/delete
,free
/new
et .new
/delete[]
Exemple
// example1.cpp
// 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;
}
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
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour