Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Fout:
Adres opschoningsfout: niet overeenkomen tussen toewijzings- en deallocatie-API's
Opmerkingen
Maakt runtimedetectie mogelijk van niet-overeenkomende geheugenbewerkingen die kunnen leiden tot niet-gedefinieerd gedrag, zoals:
-
mallocmoet zijn gekoppeld aanfree, nietdeleteofdelete[]. -
newmoet zijn gekoppeld aandelete, nietfreeofdelete[]. -
new[]moet zijn gekoppeld aandelete[], nietdeleteoffree.
In Windows alloc-dealloc-mismatch is foutdetectie standaard uitgeschakeld. Als u deze wilt inschakelen, stelt u de omgevingsvariabele set ASAN_OPTIONS=alloc_dealloc_mismatch=1 in voordat u het programma uitvoert.
Voorbeeld
// 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;
}
Voer in een opdrachtprompt voor ontwikkelaars van Visual Studio 2019 versie 16.9 of hoger de volgende opdrachten uit om een voorbeeld van alloc_dealloc_mismatch:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Uitvoer
Zie ook
Overzicht van AddressSanitizer
AddressSanitizer bekende problemen
AddressSanitizer-build- en taalreferenties
naslaginformatie over AddressSanitizer-runtime
addressSanitizer schaduwbytes
AddressSanitizer-cloud of gedistribueerde tests
integratie van AddressSanitizer-foutopsporingsprogramma's
voorbeelden van AddressSanitizer-fouten