Freigeben über


_msize_dbg

Berechnet die Größe eines Speicherblocks im Heap (nur Debugversion).

size_t _msize_dbg( 
   void *userData, 
   int blockType  
);

Parameter

  • userData
    Zeiger zu dem Speicherblock, für den die Größen bestimmt werden soll.

  • blockType
    Typ des angegebenen Speicherblocks: _CLIENT_BLOCK oder _NORMAL_BLOCK.

Rückgabewert

Bei erfolgreichem Abschluss gibt _msize_dbg die Größe des angegebenen Speicherblocks zurück (in Bytes). Andernfalls wird NULL zurückgegeben.

Hinweise

_msize_dbg ist eine Debugversion der _msize-Funktion. Wenn _DEBUG nicht definiert ist, wird jeder Aufruf von _msize_dbg zu einem Aufruf von _msize reduziert. _msize und _msize_dbg berechnen die Größe eines Speicherblocks im Basisheap, jedoch fügt _msize_dbg zwei Debugfunktionen hinzu: Es schließt die Puffer auf beiden Seiten des Benutzerteils des Speicherblocks in der zurückgegebenen Größe ein und ermöglicht Größenberechnungen für bestimmte Blocktypen.

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 Zuordnungsblocktypen und ihrer Verwendung finden Sie unter Blocktypen auf dem 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.

Diese Funktion überprüft seine Parameter. Wenn memblock ein NULL-Zeiger ist, ruft _msize einen Handler für ungültige Parameter auf, wie unter Parametervalidierung beschrieben. Wenn der Fehler behandelt wird, legt die Funktion errno auf EINVAL fest und gibt -1 zurück.

Anforderungen

Routine

Erforderlicher Header

_msize_dbg

<crtdbg.h>

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

Bibliotheken

Nur Debugversionen von C-Laufzeitbibliotheken.

Beispiel

// crt_msize_dbg.c
// compile with: /MTd
/*
 * This program allocates a block of memory using _malloc_dbg
 * and then calls _msize_dbg to display the size of that block.
 * Next, it uses _realloc_dbg to expand the amount of
 * memory used by the buffer and then calls _msize_dbg again to
 * display the new amount of memory allocated to the buffer.
 */

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <crtdbg.h>

int main( void )
{
        long *buffer, *newbuffer;
        size_t size;

        /* 
         * Call _malloc_dbg to include the filename and line number
         * of our allocation request in the header
         */
        buffer = (long *)_malloc_dbg( 40 * sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
        if( buffer == NULL )
               exit( 1 );

        /* 
         * Get the size of the buffer by calling _msize_dbg
         */
        size = _msize_dbg( buffer, _NORMAL_BLOCK );
        printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );

        /* 
         * Reallocate the buffer using _realloc_dbg and show the new size
         */
        newbuffer = _realloc_dbg( buffer, size + (40 * sizeof(long)), _NORMAL_BLOCK, __FILE__, __LINE__ );
        if( newbuffer == NULL )
               exit( 1 );
        buffer = newbuffer;
        size = _msize_dbg( buffer, _NORMAL_BLOCK );
        printf( "Size of block after _realloc_dbg of 40 more longs: %u\n", size );

        free( buffer );
        exit( 0 );
}

Ausgabe

Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320

.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

_malloc_dbg