Teilen über


_CrtSetAllocHook

Installiert eine clientdefinierte Zuordnungsfunktion, indem sie mit dem C-Laufzeit-Debugspeicherbelegungsprozess verknüpft wird (nur Debugversion).

Syntax

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Parameter

allocHook
Die neue clientdefinierte Zuordnungsfunktion, die mit dem C-Laufzeit-Debugspeicherbelegungsprozess verknüpft werden soll.

Rückgabewert

Gibt die zuvor definierte Zuordnungshookfunktion oder NULL zurück, wenn allocHook den Wert NULL hat.

Hinweise

_CrtSetAllocHook ermöglicht es einer Anwendung, eine eigene Zuordnungsfunktion in den Speicherbelegungsprozess der C-Laufzeit-Debugbibliothek einzubinden. Daher löst jeder Aufruf einer Debugzuordnungsfunktion für die Belegung, erneute Belegung oder Freigabe eines Speicherblocks einen Aufruf der Hookfunktion der Anwendung aus. Die _CrtSetAllocHook-Funktion bietet einer Anwendung eine einfache Methode, mit der getestet werden kann, wie die Anwendung Speichermangel behandelt. Darüber hinaus erhält die Anwendung die Möglichkeit, Reservierungsmuster zu überprüfen und Reservierungsinformationen für die spätere Analyse zu protokollieren. Wenn _DEBUG nicht definiert ist, werden Aufrufe von _CrtSetAllocHook während der Vorverarbeitung entfernt.

Die _CrtSetAllocHook-Funktion installiert die neue clientdefinierte Zuordnungsfunktion, die in allocHook angegeben ist, und gibt die zuvor definierte Hookfunktion zurück. Das folgende Beispiel zeigt, wie ein Prototyp einer clientdefinierten Hookfunktion für Zuordnungen entwickelt werden soll:

int YourAllocHook( int allocType, void *userData, size_t size,
                   int blockType, long requestNumber,
                   const unsigned char *filename, int lineNumber);

Das allocType Argument gibt den Typ des Zuordnungsvorgangs (_HOOK_ALLOC, und _HOOK_FREE) an, _HOOK_REALLOCder den Aufruf der Hook-Funktion der Zuordnung ausgelöst hat. Wenn der Typ der auslösenden Zuordnung vom Typ _HOOK_FREE ist, ist userData ein Zeiger zum Benutzerdatenabschnitt des freizugebenden Speicherblocks. Wenn der auslösende Zuordnungstyp jedoch liegt _HOOK_ALLOC oder _HOOK_REALLOCliegt daran, userData NULL dass der Speicherblock noch nicht zugewiesen wurde.

size gibt die Größe des Speicherblocks in Bytes an, blockType den Typ des Speicherblocks, requestNumber ist die Befehlsnummer der Objektzuordnung für den Speicherblock, und filename und lineNumber, sofern verfügbar, geben den Quelldateinamen und die Zeilennummer an, in der die auslösende Zuordnung initiiert wurde.

Nachdem die Hookfunktion verarbeitet wurde, muss sie einen booleschen Wert zurückgeben, der den C-Laufzeit-Hauptzuordnungsprozess anweist, wie das Verfahren fortgesetzt werden soll. Wenn die Hook-Funktion den Hauptzuweisungsprozess fortsetzen möchte, als ob die Hook-Funktion nie aufgerufen wurde, sollte die Hook-Funktion zurückgegeben TRUEwerden, was dazu führt, dass der ursprüngliche auslösende Zuordnungsvorgang ausgeführt wird. Die Hook-Funktion kann Zuordnungsinformationen für spätere Analysen sammeln und speichern, ohne den aktuellen Zuordnungsvorgang oder den Zustand des Debug-Heaps zu beeinträchtigen.

Wenn die Hookfunktion den Hauptzuordnungsprozess anweist, das Verfahren so fortzusetzen, als ob das auslösende Zuordnungsverfahren aufgerufen wurde und fehlgeschlagen ist, sollte die Hookfunktion den Wert FALSE zurückgeben. Die Hook-Funktion kann eine vielzahl von Speicherbedingungen simulieren und Heapzustände debuggen, um zu testen, wie die Anwendung jede Situation behandelt.

Um die Hookfunktion zu löschen, leiten Sie NULL an _CrtSetAllocHook weiter.

Weitere Informationen _CrtSetAllocHook zur Verwendung mit anderen Speicherverwaltungsfunktionen oder zum Schreiben eigener clientdefinierter Hookfunktionen finden Sie im Schreiben von Debug-Hook-Funktionen.

Hinweis

_CrtSetAllocHook wird unter "/clr:pure" nicht unterstützt. Die Optionen "/clr:pure " und "/clr:safe compiler" sind in Visual Studio 2015 veraltet und werden in Visual Studio 2017 entfernt.

Anforderungen

Routine Erforderlicher Header
_CrtSetAllocHook <crtdbg.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Libraries

Nur Debugversionen von C-Laufzeitbibliotheken

Beispiel

Ein Beispiel für die Verwendung _CrtSetAllocHookfinden Sie unter crt_dbg2.

Siehe auch

Debugroutinen
_CrtGetAllocHook