Freigeben über


_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_errlistund _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

Siehe auch

Debugroutinen
calloc
_malloc_dbg
_DEBUG