Condividi tramite


Errore: alloc-dealloc-mismatch

Errore di sanificazione dell'indirizzo: mancata corrispondenza tra le API di allocazione e deallocazione

La alloc/dealloc funzionalità di mancata corrispondenza in AddressSanitizer è disattivata per impostazione predefinita per Windows. Per abilitarla, eseguire set ASAN_OPTIONS=alloc_dealloc_mismatch=1 prima di eseguire il programma. Questa variabile di ambiente viene controllata in fase di esecuzione per segnalare gli errori in malloc/delete,free/new e .new/delete[]

Esempio

// 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;
}

Per compilare e testare questo esempio, eseguire questi comandi in un prompt dei comandi per sviluppatori di Visual Studio 2019 versione 16.9 o successiva:

cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2

Errore risultante

Screenshot del debugger che mostra l'errore alloc-dealloc-mismatch nell'esempio 1.

Vedi anche

Panoramica di AddressSanitizer
Problemi noti di AddressSanitizer
Riferimento alla compilazione e al linguaggio AddressSanitizer
Informazioni di riferimento sul runtime AddressSanitizer
Byte ombreggiatura AddressSanitizer
AddressSanitizer cloud o test distribuiti
Integrazione del debugger AddressSanitizer
Esempi di errore addressSanitizer