Partager via


Erreur : alloc-dealloc-mismatch

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 :

  • malloc doit être associé à free, non delete ou delete[].
  • new doit être associé à delete, non free ou delete[].
  • new[] doit être associé à delete[], non delete ou free.

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

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