Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Błąd:
Błąd narzędzia do oczyszczania adresu: niezgodność między interfejsami API alokacji i cofania alokacji
Uwagi
Umożliwia wykrywanie w czasie wykonywania niezgodnych operacji pamięci, które mogą prowadzić do niezdefiniowanego zachowania, takiego jak:
-
mallocmusi być sparowana z parametremfree, niedeletelubdelete[]. -
newmusi być sparowana z parametremdelete, niefreelubdelete[]. -
new[]musi być sparowana z parametremdelete[], niedeletelubfree.
W systemie Windows alloc-dealloc-mismatch wykrywanie błędów jest domyślnie wyłączone. Aby ją włączyć, ustaw zmienną środowiskową set ASAN_OPTIONS=alloc_dealloc_mismatch=1 przed uruchomieniem programu.
Przykład
// 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;
}
W wierszu polecenia dla deweloperów programu Visual Studio 2019 w wersji 16.9 lub nowszej uruchom następujące polecenia, aby zobaczyć przykład alloc_dealloc_mismatch:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Wynik
Zobacz też
AddressSanitizer — omówienie
Rozwiązywanie znanych problemów z programemSanitizer
Dokumentacja języka i kompilacji narzędzia AddressSanitizer
AddressSanitizer runtime reference (Dokumentacja środowiska uruchomieniowego AddressSanitizer)
Bajty w tle addressSanitizer
AddressSanitizer — chmura lub testowanie rozproszone
Integracja debugera AddressSanitizer
Przykłady błędów addressSanitizer