Partage via


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 vérifié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

Capture d’écran du débogueur affichant l’erreur alloc-dealloc-mismatch dans l’exemple 1.

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