Debugversionen von Heapreservierungsfunktionen

Die C-Runtime -Bibliothek (CRT) enthält spezielle Debugversionen der Heap-Zuordnungsfunktionen. Diese Funktionen haben die gleichen Namen wie die Releaseversionen, _dbg die an sie angefügt wurden. In diesem Artikel werden die Unterschiede zwischen der Releaseversion einer CRT-Funktion und der _dbg Version unter Verwendung malloc und _malloc_dbg als Beispiele beschrieben.

Verhalten in Debugbuilds

Wenn _DEBUG sie definiert ist, ordnet das CRT alle malloc Aufrufe zu _malloc_dbg. Daher müssen Sie ihren Code _malloc_dbg nicht neu schreiben, anstatt malloc die Vorteile beim Debuggen zu erhalten.

Unter Umständen möchten Sie _malloc_dbg jedoch explizit aufrufen. Der explizite Aufruf von _malloc_dbg bietet zusätzliche Vorteile:

  • Nachverfolgen von _CLIENT_BLOCK-Reservierungen.

  • Speichern von Quelldatei und Zeilennummer an der Stelle, an der die Reservierung angefordert wurde.

Wenn Sie Ihre malloc Aufrufe _malloc_dbgnicht konvertieren möchten, können Sie die Quelldateiinformationen abrufen, indem Sie definieren _CRTDBG_MAP_ALLOC, was bewirkt, dass der Präprozessor alle Aufrufe malloc_malloc_dbg direkt zuzuordnen, anstatt sich auf einen Wrapper zu mallocverlassen.

Um Reservierungstypen in Clientblöcken gesondert nachzuverfolgen, muss _malloc_dbg direkt aufgerufen und der blockType-Parameter auf _CLIENT_BLOCK festgelegt werden.

Verhalten in Nicht-Debug-Builds

Wenn _DEBUG sie nicht definiert ist, werden Aufrufe malloc nicht gestört, aufrufe _malloc_dbg werden aufgelöst malloc, die Definition wird _CRTDBG_MAP_ALLOC ignoriert, und Quelldateiinformationen, die sich auf die Zuordnungsanforderung beziehen, werden nicht bereitgestellt. Da malloc kein Blocktypparameter vorhanden ist, werden Anforderungen für _CLIENT_BLOCK Typen als Standardzuordnungen behandelt.

Siehe auch

CRT-Debugverfahren