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
/delete
melden,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
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