_CrtIsMemoryBlock
Überprüft, ob sich ein angegebener Speicherblock im lokalen Heap befindet und ob er einen gültigen Debugheap-Blocktypbezeichner hat (nur Debugversion).
Syntax
int _CrtIsMemoryBlock(
const void *userData,
unsigned int size,
long *requestNumber,
char **filename,
int *lineNumber
);
Parameter
userData
Zeiger auf den Anfang des zu überprüfenden Speicherblocks.
size
Größe des angegebenen Blocks (in Bytes).
requestNumber
Zeiger zur Belegungsnummer des Blocks oder NULL
.
filename
Zeiger zum Namen der Quelldatei, der den Block angefordert hat, oder NULL
.
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. Ein nicht in einem requestNumber
, filename
oder lineNumber
parameter übergebener WertNULL
bewirkt_CrtIsMemoryBlock
, dass der Parameter auf den Wert im Debugheader des Speicherblocks festgelegt wird, wenn er den Block im lokalen Heap findet. Wenn _DEBUG
nicht definiert ist, werden Aufrufe von _CrtIsMemoryBlock
während der Vorverarbeitung entfernt.
Wenn _CrtIsMemoryBlock
ein Fehler auftritt, wird sie zurückgegeben FALSE
, und die Ausgabeparameter werden auf Standardwerte initialisiert: requestNumber
und lineNumber
werden auf 0 festgelegt und filename
auf NULL
.
Da diese Funktion zurückgibt TRUE
oder FALSE
, kann sie an eines der _ASSERT
Makros übergeben werden, um einen grundlegenden Fehlerbehandlungsmechanismus für das Debuggen zu erstellen. Im folgenden Beispiel wird ein Assertionsfehler verursacht, wenn sich die angegebene Adresse nicht innerhalb des lokalen Heaps befindet:
_ASSERTE( _CrtIsMemoryBlock( userData, size, &requestNumber,
&filename, &linenumber ) );
Weitere Informationen zur _CrtIsMemoryBlock
Verwendung mit anderen Debugfunktionen und Makros finden Sie unter "Makros für die Berichterstellung". Informationen dazu, wie Speicherblöcke in der Debugversion des Basis heap zugeordnet, initialisiert und verwaltet werden, finden Sie unter CRT Debug Heap Details.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_CrtIsMemoryBlock |
<crtdbg.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Libraries
Nur Debugversionen von C-Laufzeitbibliotheken
Beispiel
Weitere Informationen finden Sie im Beispiel für den _CrtIsValidHeapPointer
Artikel.