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
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