Freigeben über


_msize_dbg

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

Syntax

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

Gibt nach erfolgreichem Abschluss _msize_dbg die Größe (in Byte) des angegebenen Speicherblocks zurück; andernfalls wird sie zurückgegeben NULL.

Hinweise

_msize_dbg ist eine Debugversion der _msize -Funktion. Wenn _DEBUG sie nicht definiert ist, wird jeder Anruf _msize_dbg auf einen Anruf reduziert _msize. _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 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 Zuordnungsblocktypen und deren Verwendung finden Sie unter "Typen von Blöcken" im Debug-Heap. Informationen zu den Unterschieden zwischen Standard-Heap-Funktionen und den Debugversionen finden Sie unter Debugversionen von Heap-Zuordnungsfunktionen.

Diese Funktion überprüft seine Parameter. Wenn memblock es sich um einen Nullzeiger handelt, _msize_dbg wird ein ungültiger Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn der Fehler behandelt wird, legt errno die Funktion -1 fest EINVAL und gibt -1 zurück (18.446.744.073.709.551.615 nicht signiert).

Anforderungen

Routine Erforderlicher Header
_msize_dbg <crtdbg.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Libraries

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

Output

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

Siehe auch

Debugroutinen
_malloc_dbg