Fehler: alloc-dealloc-mismatch

Beheben des Sanitizerfehlers: Falsche Übereinstimmung zwischen Zuordnungs- und Deallocation-APIs

Die alloc/dealloc Übereinstimmungsfunktionalität in AddressSanitizer ist standardmäßig für Windows deaktiviert. Führen Sie zum Aktivieren des Programms vor dem Ausführen des Programms aus set ASAN_OPTIONS=alloc_dealloc_mismatch=1 . Diese Umgebungsvariable wird zur Laufzeit überprüft, um Fehler zu malloc/deletemelden,free/new und .new/delete[]

Beispiel

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

Um dieses Beispiel zu erstellen und zu testen, führen Sie diese Befehle in einer Visual Studio 2019 Version 16.9 oder höher der Entwicklerbefehlsaufgabeaufforderung aus:

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

Resultierender Fehler

Screenshot of debugger displaying alloc-dealloc-mismatch error in example 1.

Siehe auch

Übersicht über AddressSanitizer
Bekannte Probleme von AddressSanitizer
Kompilierungs- und Sprachreferenz für AddressSanitizer
Runtimereferenz für AddressSanitizer
AddressSanitizer-Schattenbytes
AddressSanitizer-Tests in der Cloud oder verteilten Umgebungen
Integration des AddressSanitizer-Debuggers
AddressSanitizer-Fehlerbeispiele