_calloc_dbg
Weist Speicherblöcke im Heap mit zusätzlichem Speicherplatz für einen Debugheader zu und überschreiben Puffer (nur Debugversion).
Syntax
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parameter
number
Angeforderte Anzahl von Speicherblöcken.
size
Angeforderte Größe eines Speicherblocks (Bytes).
blockType
Angeforderter Typ des Speicherblocks: _CLIENT_BLOCK
oder _NORMAL_BLOCK
.
Informationen zu den Zuordnungsblocktypen und deren Verwendung finden Sie unter "Typen von Blöcken" im Debug-Heap.
filename
Zeiger zum Namen der Quelldatei, der die Zuordnung angefordert hat, oder NULL
.
linenumber
Zeilennummer in der Quelldatei, in der die Zuordnung angefordert wurde, oder NULL
.
Die filename
Parameter sind linenumber
nur verfügbar, wenn _calloc_dbg
explizit aufgerufen oder die _CRTDBG_MAP_ALLOC
Präprozessorkonstante definiert wurde.
Rückgabewert
Bei erfolgreichem Abschluss gibt diese Funktion entweder einen Zeiger an den Benutzerteil des zuletzt belegten Speicherblocks zurück, ruft die neue Handlerfunktion auf oder gibt NULL
zurück. Eine vollständige Beschreibung des Rückgabeverhaltens finden Sie im Abschnitt "Hinweise". Weitere Informationen zur Verwendung der neuen Handlerfunktion finden Sie in der calloc
Funktion.
Hinweise
_calloc_dbg
ist eine Debugversion der calloc
Funktion. Wenn _DEBUG
sie nicht definiert ist, wird jeder Anruf _calloc_dbg
auf einen Anruf reduziert calloc
. calloc
und _calloc_dbg
belegen number
-Speicherblöcke im Basisheap, jedoch bietet _calloc_dbg
mehrere Debugfunktionen:
Puffer auf beiden Seiten des Benutzerteils des Blocks zum Prüfen auf Speicherverluste.
Blocktypparameter zum Nachverfolgen von bestimmten Belegungstypen.
filename
/linenumber
-Informationen zum Ermitteln des Ursprungs von Belegungsanforderungen.
_calloc_dbg
belegt jeden Speicherblock mit etwas mehr Speicherplatz als der angeforderten size
. Der zusätzliche Speicherplatz wird vom Debug-Heap-Manager verwendet, um die Debugspeicherblöcke zu verknüpfen und der Anwendung Debugheaderinformationen und Überschreiben von Puffern bereitzustellen. Wenn der Block zugewiesen wird, wird der Benutzerteil des Blocks mit dem Wert 0xCD gefüllt, und jeder der Überschreibpuffer wird mit 0xFD gefüllt.
_calloc_dbg
legt errno
auf ENOMEM
fest, wenn eine Speicherbelegung fehlschlägt. EINVAL
wird zurückgegeben, wenn der benötigte Speicherplatz (einschließlich des bereits erwähnten Mehraufwands) _HEAP_MAXREQ
überschreitet. Informationen zu diesem und anderen Fehlercodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Informationen dazu, wie Speicherblöcke in der Debugversion des Basis heap zugeordnet, initialisiert und verwaltet werden, finden Sie unter CRT Debug Heap Details. Informationen zu den Unterschieden zwischen dem Aufrufen einer Standard-Heap-Funktion und der Debugversion finden Sie unter Debugversionen von Heap-Zuordnungsfunktionen.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_calloc_dbg |
<crtdbg.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_callocd.c
// This program uses _calloc_dbg to allocate space for
// 40 long integers. It initializes each element to zero.
#include <stdio.h>
#include <malloc.h>
#include <crtdbg.h>
int main( void )
{
long *bufferN, *bufferC;
// Call _calloc_dbg to include the filename and line number
// of our allocation request in the header and also so we can
// allocate CLIENT type blocks specifically
bufferN = (long *)_calloc_dbg( 40, sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
bufferC = (long *)_calloc_dbg( 40, sizeof(long), _CLIENT_BLOCK, __FILE__, __LINE__ );
if( bufferN != NULL && bufferC != NULL )
printf( "Allocated memory successfully\n" );
else
printf( "Problem allocating memory\n" );
/ _free_dbg must be called to free CLIENT type blocks
free( bufferN );
_free_dbg( bufferC, _CLIENT_BLOCK );
}
Allocated memory successfully