Freigeben über


_calloc_dbg

Ordnet einige Speicherblöcke im Heap mit zusätzlichem Speicher für einen Header des Debuggens und überschreibt Puffer (nur in der Debugversion).

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

Parameter

  • num
    Angeforderte viele Speicherblöcke.

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

  • blockType
    Angeforderter Typ des Speicherblocks: _CLIENT_BLOCK oder _NORMAL_BLOCK.

    Weitere Informationen zu den Typen von Zuordnungen blocks und wie diese verwendet werden, finden Sie unter Blocktypen auf dem Debugheap.

  • filename
    Ein Zeiger auf den Namen der Quelldatei, die NULLoder - Vorgang Zuordnungen angefordert hat.

  • linenumber
    Zeilennummer in der Quelldatei, in der NULLoder Operation Zuordnungen angefordert wurde.

Die filename und linenumber-Parameter sind nur verfügbar, wenn _calloc_dbg explizit aufgerufen wurde oder die _CRTDBG_MAP_ALLOC Präprozessor konstante definiert wurde.

Rückgabewert

Bei erfolgreichem Abschluss gibt diese Funktion einen Zeiger auf den Benutzern des letzten belegten Speicherblocks zurück, ruft die neue Handlerfunktion veranschaulicht NULLoder gibt diese zurück.Eine vollständige Beschreibung des Verhaltens zurückgeben, finden Sie in den Hinweisen.Weitere Informationen darüber, wie die neue Handlerfunktion verwendet wird, 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 callocreduziert.calloc anordnen und _calloc_dbg Speicherblöcke im num Basisheap auf, aber _calloc_dbg bietet mehrere Debugfeatures an:

  • Puffer auf beiden Seiten des Benutzers Teils des Blocks für Verluste zu testen.

  • Ein Parameter Blockformat, um bestimmte Typen von Zuordnungen zu verfolgen.

  • filename/linenumber Informationen, wenn der Ursprung der Anforderungen für Zuordnungen zu bestimmen.

_calloc_dbg ordnet jeden Speicherblock mit etwas mehr Platz als angeforderte size.Das zusätzliche Speicherplatz wird vom Debugheap Manager, um die Programmdebuginformationen Speicherblöcke zu verknüpfen und die Anwendung bereitzustellen und Debuggen mit Headerinformationen Puffer zu überschreiben.Wenn der Block zugeordnet ist, wird der Benutzer des Blocks mit dem Wert 0xCD gefüllt und jeder der überschreibens Puffer werden mit 0xFD gefüllt.

_calloc_dbg legt diesen fest ENOMEM zu errno , wenn eine Speicherbelegung fehlschlägt. EINVAL wird zurückgegeben, wenn der Arbeitsspeicher benötigt wird (einschließlich Mehraufwand bereits erwähnt) _HEAP_MAXREQüberschreitet.Weitere Informationen zu diesem und anderen Fehlercodes finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.

Weitere Informationen zum Speicherblöcke in der Debugversion des Basisheaps zugeordnet, initialisiert und verwaltet werden, finden Sie unter Speicherverwaltung und Debugheap.Weitere Informationen über die Unterschiede zwischen den Aufrufen einer Funktion heap Standard für die Debugversion in einem Debugbuild einer Anwendung finden Sie unter Verwenden der Debugversion für die Grundversion.

Anforderungen

Routine

Erforderlicher Header

_calloc_dbg

<crtdbg.h>

Weitere Informationen finden Sie unter Kompatibilität 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. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Debug- Routinen

calloc

_malloc_dbg

_DEBUG