_CrtBreakAlloc gebruiken om problemen met geheugentoewijzingen op te lossen


Samenvatting


Wanneer u geheugenlekkage opneemt met behulp van de C-runtime van debug C, is het meestal handig om een onderbrekingspunt direct in te stellen voordat u het geheugen toewijst dat de lekkage veroorzaakt. Als u _crtBreakAlloc in de compileertijd of de uitvoeringstijd instelt, kunt u ervoor zorgen dat een door de gebruiker gedefinieerde onderbrekingspunt op een bepaald punt geheugentoewijzing veroorzaakt.

Meer informatie


Wanneer u geheugenlekkages opspoort met debug-CRT-functies, zoals _CrtDumpMemoryLeaks, wordt een toewijzingsnummer tussen accolades ({}) vaak weergegeven. Hierna volgt een geheugenlek bij toewijzing nummer 18:
   Detected memory leaks!   Dumping objects ->   {18} normal block at 0x00660BE4, 10 bytes long   Data: <          > CD CD CD CD CD CD CD CD CD CD   Object dump complete. 
Het is handig om een onderbrekingspunt in te stellen rechts voordat dit geheugen wordt toegewezen, zodat u door de call stack kunt overstappen en te zien welke functies dit geheugen nodig hebben. Met de functie debug-CRT-_CrtSetBreakAlloc kunt u een toewijzingsnummer opgeven waarbij u wilt afbreken. Voor deze methode moet u het programma opnieuw compileren telkens wanneer u een toewijzings onderbreking wilt instellen. U kunt ook het venster controle gebruiken en de toewijzings controlepunt dynamisch instellen. Deze methode heeft het voordeel dat u geen wijzigingen in de broncode hoeft te wijzigen of opnieuw wilt compileren. Als u statisch koppelt aan de C-Run-time, wordt de variabele die u wilt wijzigen _crtBreakAlloc genoemd. Als u dynamisch koppelt aan de C-runtime, is de variabele die u wilt wijzigen in het venster controle, {, msvcr40d. dll} * __p__crtBreakAlloc () als u Visual C++ 4,0 of 4,1 gebruikt. De variabele die u wilt wijzigen in het venster controle, moet {, msvcrtd. dll} * __p__crtBreakAlloc () als u Visual C++ 4,2 of hoger gebruikt. Ga als volgt te werk om te bepalen met welke versie van de CRT:
  1. Kies in het menu opbouwen de optie instellingen.
  2. Selecteer in het deelvenster instellingen voor: de configuratie die u maakt. Kies het tabblad C/C++ en selecteer vervolgens de categorie code generatie.
In het dialoogvenster run-time library gebruiken wordt weergegeven welke versie van de CRT u gebruikt. (Als deze instelling leeg is, controleert u of u slechts één configuratie hebt geselecteerd in het deelvenster instellingen voor: Voer de volgende stappen uit om dynamisch een toewijzings controlepunt in te stellen:
  1. Start de foutopsporingssessie. Kies in het menu opbouwen de optie fout opsporen-> stap. Als u de ' debug single Threadd ' of ' debug multi-threaded CRT ' gebruikt, volgt u stap 1a. U kunt ook stap 1b volgen.
    1. Typ _crtBreakAlloc in het venster controle. Hier ziet u het huidige toewijzingsnummer waarmee uw programma wordt gestopt. Dit toewijzingsnummer moet-1 zijn wanneer het programma voor het eerst wordt gestart.
    2. Typ {,, msvcr40d. dll} * __p__crtBreakAlloc () in het venster controle als u Visual C++ 4,0 of 4,1 gebruikt. Typ {,, msvcrtd. dll} * __p__crtBreakAlloc () als u Visual C++ 4,2 of hoger gebruikt. Hier ziet u het huidige toewijzingsnummer waarmee uw programma wordt gestopt. Dit toewijzingsnummer moet-1 zijn wanneer het programma voor het eerst wordt gestart.
  2. Dubbelklik op de waarde-1 en voer het nieuwe toewijzingsnummer in dat een door de gebruiker gedefinieerd onderbrekingspunt veroorzaakt.
  3. Kies in het menu Foutopsporing de optie debug-> go.
Zie voor meer informatie over _crtBreakAlloc in de online-Help de optie aanvragen voor heap-toewijzing bijhouden.