Error: alloc-dealloc-mismatch
Error de AddressSanitizer: Falta de coincidencia entre las API de asignación y desasignación
La funcionalidad de falta de coincidencia alloc
/dealloc
en AddressSanitizer está desactivada de forma predeterminada en Windows. Para habilitarla, ejecute set ASAN_OPTIONS=alloc_dealloc_mismatch=1
antes de ejecutar el programa. Esta variable de entorno se comprueba en tiempo de ejecución para notificar errores en malloc
/delete
, new
/free
y new
/delete[]
.
Ejemplo
// 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;
}
Para compilar y probar este ejemplo, ejecute estos comandos en un símbolo del sistema para desarrolladores de Visual Studio 2019 versión 16.9 o posterior:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Error resultante
Consulte también
Introducción a AddressSanitizer
Problemas conocidos de AddressSanitizer
Referencia de lenguaje y compilación de AddressSanitizer
Referencia del entorno de ejecución addressSanitizer
Bytes de sombra addressSanitizer
Pruebas distribuidas o en la nube addressSanitizer
Integración del depurador AddressSanitizer
Ejemplos de errores addressSanitizer