Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Fehler:
Bereinigungsfehler: Konflikt zwischen Zuordnung und Deallocation-APIs
Bemerkungen
Ermöglicht die Laufzeiterkennung von nicht übereinstimmenden Speichervorgängen, die zu einem nicht definierten Verhalten führen können, z. B.:
-
mallocmuss mitfree, nichtdeleteoderdelete[]. -
newmuss mitdelete, nichtfreeoderdelete[]. -
new[]muss mitdelete[], nichtdeleteoderfree.
In Windows alloc-dealloc-mismatch ist die Fehlererkennung standardmäßig deaktiviert. Um sie zu aktivieren, legen Sie die Umgebungsvariable set ASAN_OPTIONS=alloc_dealloc_mismatch=1 vor dem Ausführen des Programms fest.
Beispiel
// example1.cpp
// Demonstrate 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 in einer Visual Studio 2019- Version 16.9- oder höher-Entwickler-Eingabeaufforderung die folgenden Befehle aus, um ein Beispiel zu alloc_dealloc_mismatchsehen:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Ausgabe
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