Teilen über


Fehler: alloc-dealloc-mismatch

Bereinigungsfehler: Konflikt zwischen Zuordnung und Deallocation-APIs

Die alloc/dealloc Nichtübereinstimmungsfunktion in AddressSanitizer ist für Windows standardmäßig deaktiviert. Um es zu aktivieren, führen Sie vor set ASAN_OPTIONS=alloc_dealloc_mismatch=1 dem Ausführen des Programms aus. 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;
}

Führen Sie zum Erstellen und Testen dieses Beispiels die folgenden Befehle in einer Visual Studio 2019,16.9- oder höher-Entwickler-Eingabeaufforderung aus:

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

Resultierender Fehler

Screenshot des Debuggers, der den Fehler

Siehe auch

AddressSanitizer -Übersicht
Beheben bekannter Probleme mit demSanitizer
AddressSanitizer Build- und Sprachreferenz
AddressSanitizer-Laufzeitreferenz
AddressSanitizer-Schattenbytes
AddressSanitizer-Cloud oder verteilte Tests
AddressSanitizer Debugger-Integration
Beispiele für AddressSanitizer-Fehler