Share via


_calloc_dbg

Belegt einige Speicherblöcke im Heap mit zusätzlichem Speicherplatz für einen Debugheader und Überschreibungspuffer (nur Debugversion).

void *_calloc_dbg( 
   size_t num,
   size_t size,
   int blockType,
   const char *filename,
   int linenumber 
);

Parameter

  • num
    Angeforderte Anzahl von Speicherblöcken.

  • size
    Angeforderte Größe eines Speicherblocks (Bytes).

  • blockType
    Angeforderter Typ des Speicherblocks: _CLIENT_BLOCK oder _NORMAL_BLOCK.

    Weitere Informationen zu den Zuordnungsblocktypen und ihrer Verwendung finden Sie unter Blocktypen auf dem Debugheap.

  • 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- und linenumber-Parameter sind nur verfügbar, wenn _calloc_dbg explizit aufgerufen wurde 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 unter der calloc-Funktion.

Hinweise

_calloc_dbg ist eine Debugversion der calloc-Funktion. Wenn _DEBUG nicht definiert ist, wird jeder Aufruf von _calloc_dbg zu einem Aufruf von calloc reduziert. calloc und _calloc_dbg belegen num-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 Debugheapmanager verwendet, um die Debugspeicherblöck zu verknüpfen und Debugheaderinformationen und Überschreibungspuffer für die Anwendung bereitzustellen. Wenn der Block belegt wurde, wird der Benutzerteil des Blocks mit dem Wert "0xCD" gefüllt, und jeder der Überschreibungspuffer 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 errno, _doserrno, _sys_errlist und _sys_nerr.

Informationen darüber, wie Speicherblöcke in der Debugversion des Basisheaps zugeordnet, initialisiert und verwaltet werden, finden Sie unter Details zum CRT-Debugheap. Weitere Informationen zu den Unterschieden zwischen dem Aufruf einer Standardheapfunktion und der Debugversion in einem Debugbuild einer Anwendung finden Sie unter Debugversionen von Heapreservierungsfunktionen.

Anforderungen

Routine

Erforderlicher Header

_calloc_dbg

<crtdbg.h>

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

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 );
}
  

.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

calloc

_malloc_dbg

_DEBUG