Share via


Debugversionen von Heapreservierungsfunktionen

Dieses Thema gilt für folgende Anwendungsbereiche:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

Thema ist nicht vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Pro, Premium und Ultimate

Thema ist nicht vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Die C-Laufzeitbibliothek umfasst spezielle Debugversionen der Heapreservierungsfunktionen. Diese Funktionen haben dieselben Namen wie die Releaseversionen, gefolgt vom Suffix _dbg. In diesem Thema werden die Unterschiede zwischen der Releaseversion und der _dbg-Version einer CRT-Funktion beschrieben, wobei malloc und _malloc_dbg als Beispiele verwendet werden.

Wenn _DEBUG definiert wird, ordnet das CRT alle malloc-Aufrufe _malloc_dbg zu. Aus diesem Grund müssen Sie den Code nicht umschreiben, indem Sie malloc durch _malloc_dbg ersetzen, um die Vorteile beim Debuggen nutzen zu können.

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 die malloc-Aufrufe nicht in _malloc_dbg-Aufrufe konvertieren möchten, erhalten Sie die Informationen zur Quelldatei auch durch die Definition von _CRTDBG_MAP_ALLOC. Dadurch werden alle malloc-Aufrufe vom Präprozessor direkt _malloc_dbg zugeordnet, sodass kein Wrapper für malloc erforderlich ist.

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

Wird _DEBUG nicht definiert, geschieht Folgendes: malloc-Aufrufe werden nicht behindert, _malloc_dbg-Aufrufe werden in malloc-Aufrufe aufgelöst, die Definition von _CRTDBG_MAP_ALLOC wird ignoriert, und es werden keine Quelldateiinformationen zur Reservierungsanforderung bereitgestellt. Da malloc keinen Blocktypparameter hat, werden _CLIENT_BLOCK-Anforderungen wie Standardreservierungen behandelt.

Siehe auch

Weitere Ressourcen

CRT-Debugverfahren