Freigeben über


_CrtIsMemoryBlock

Überprüft, ob sich ein angegebener Speicherblock im lokalen Heap befindet und ob er einen gültigen Debugheap-Blocktypbezeichner hat (nur Debugversion).

int _CrtIsMemoryBlock( 
   const void *userData,
   unsigned int size,
   long *requestNumber,
   char **filename,
   int *linenumber 
);

Parameter

  • [in] userData
    Zeiger auf den Anfang des zu überprüfenden Speicherblocks.

  • [in] size
    Größe des angegebenen Blocks (in Bytes).

  • [out] requestNumber
    Zeiger zur Belegungsnummer des Blocks oder NULL.

  • [out] filename
    Zeiger zum Namen der Quelldatei, der den Block angefordert hat, oder NULL.

  • [out] linenumber
    Zeiger zur Zeilennummer in der Quelldatei oder NULL.

Rückgabewert

_CrtIsMemoryBlock gibt TRUE zurück, wenn sich der angegebene Speicherblock im lokalen Heap befindet und über einen gültigen Debugheap-Blocktypbezeichner verfügt. Andernfalls gibt die Funktion FALSE zurück.

Hinweise

Die _CrtIsMemoryBlock-Funktion überprüft, ob sich ein angegebener Speicherblock im lokalen Heap der Anwendung befindet und ob sie einen gültigen Blocktypbezeichner hat. Diese Funktion kann auch verwendet werden, um die Bestellnummer der Objektzuordnung und den Quelldateinamen/die Zeilennummer abzurufen, wo die Speicherblockbelegung ursprünglich angefordert wurde. Die Übergabe von Werten ungleich NULL für den requestNumber-, filename- oder linenumber-Parameter führt dazu, dass _CrtIsMemoryBlock diese Parameter auf die Werte im Debugheader des Speicherblocks festlegt, wenn der Block im lokalen Heap gefunden wird. Wenn _DEBUG nicht definiert ist, werden Aufrufe von _CrtIsMemoryBlock während der Vorverarbeitung entfernt.

Wenn _CrtIsMemoryBlock fehlschlägt, wird FALSE zurückgegeben und die Ausgabeparameter werden auf die Standardwerte initialisiert: requestNumber und lineNumber werden auf 0 und filename wird auf NULL eingestellt.

Da diese Funktion TRUE oder FALSE zurückgibt, kann sie an eine der _ASSERT-Makros übergeben werden, um einen einfachen Debug-Fehlerbehandlungsmechanismus zu erstellen. Im folgenden Beispiel wird ein Assertionsfehler ausgelöst, wenn sich die angegebene Adresse nicht im lokalen Heap befindet:

_ASSERTE( _CrtIsMemoryBlock( userData, size, &requestNumber, 
&filename, &linenumber ) );

Weitere Informationen dazu, wie _CrtIsMemoryBlock mit anderen Debugfunktionen und -makros verwendet werden kann, finden Sie unter Makros für die Berichterstellung. Informationen darüber, wie Speicherblöcke in der Debugversion des Basisheaps zugeordnet, initialisiert und verwaltet werden, finden Sie unter Details zum CRT-Debugheap.

Anforderungen

Routine

Erforderlicher Header

_CrtIsMemoryBlock

<crtdbg.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

Bibliotheken

Nur Debugversionen von C-Laufzeitbibliotheken.

Beispiel

Weitere Informationen hierzu finden Sie im Beispiel für das Thema _CrtIsValidHeapPointer.

.NET Framework-Entsprechung

Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Debugroutinen