Compartir a través de


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

Captura de pantalla del depurador que muestra el error alloc-dealloc-mismatch en el ejemplo 1.

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