Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Fel:
Adressfel för sanitizer: Matchningsfel mellan allokerings- och frigörings-API:er
Anmärkningar
Aktiverar körningsidentifiering av felmatchade minnesåtgärder som kan leda till odefinierat beteende, till exempel:
-
mallocmåste parkopplas medfree, intedeleteellerdelete[]. -
newmåste parkopplas meddelete, intefreeellerdelete[]. -
new[]måste parkopplas meddelete[], intedeleteellerfree.
I Windows alloc-dealloc-mismatch är felidentifieringen inaktiverad som standard. Om du vill aktivera den anger du miljövariabeln set ASAN_OPTIONS=alloc_dealloc_mismatch=1 innan du kör programmet.
Exempel
// 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;
}
I en kommandotolk för Visual Studio 2019 version 16.9 eller senare kör du följande kommandon för att se ett exempel på alloc_dealloc_mismatch:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Utgång
Se även
AddressSanitizer– översikt
AddressSanitizer kända problem
AddressSanitizer- och språkreferens
AddressSanitizer-körningsreferens
AddressSanitizer skugg byte
AddressSanitizer-moln eller distribuerad testning
AddressSanitizer-felsökningsintegrering
AddressSanitizer-felexempel