Chyba: alloc-dealloc-mismatch
Chyba sanitizátoru: Neshoda mezi rozhraními API přidělení a přidělením
Funkce alloc
/dealloc
neshody v AddressSanitizeru je ve výchozím nastavení pro Windows vypnutá. Pokud ho chcete povolit, spusťte set ASAN_OPTIONS=alloc_dealloc_mismatch=1
ho před spuštěním programu. Tato proměnná prostředí je kontrolována za běhu za účelem hlášení chyb na malloc
new
free
delete
//, a .new
/delete[]
Příklad
// 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;
}
Pokud chcete tento příklad sestavit a otestovat, spusťte tyto příkazy v sadě Visual Studio 2019 verze 16.9 nebo novějším vývojářském příkazovém řádku:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Výsledná chyba
Viz také
Přehled AddressSanitizer
Známé problémy s addressSanitizerem
Referenční dokumentace k sestavení a jazyku AddressSanitizer
Referenční informace k modulu runtime AddressSanitizer
Stínové bajty AddressSanitizer
AddressSanitizer – cloud nebo distribuované testování
Integrace ladicího programu AddressSanitizer
Příklady chyb AddressSanitizer