Sdílet prostřednictvím


_msize_dbg

Vypočítá velikost bloku paměti v haldě (pouze ladicí verze).

Syntaxe

size_t _msize_dbg(
   void *userData,
   int blockType
);

Parametry

userData
Ukazatel na blok paměti, pro který chcete určit velikost.

blockType
Typ zadaného bloku paměti: _CLIENT_BLOCK nebo _NORMAL_BLOCK.

Vrácená hodnota

Po úspěšném dokončení _msize_dbg vrátí velikost zadaného bloku paměti (v bajtech), jinak vrátí NULLhodnotu .

Poznámky

_msize_dbg je ladicí verze funkce _msize . Pokud _DEBUG není definováno, každé volání _msize_dbg se sníží na volání _msize. Velikost _msize bloku paměti v základní haldě můžete _msize_dbg vypočítat, ale _msize_dbg přidá dvě funkce ladění: Zahrnuje vyrovnávací paměti na obou stranách uživatelské části bloku paměti ve vrácené velikosti a umožňuje výpočty velikosti pro konkrétní typy bloků bloků.

Informace o přidělování, inicializaci a správě bloků paměti ve verzi ladění základní haldy naleznete v podrobnostech haldy ladění CRT. Informace o typech bloků přidělení a jejich použití najdete v tématu Typy bloků v haldě ladění. Informace o rozdílech mezi standardními funkcemi haldy a ladicí verze naleznete v tématu Ladění verzí funkcí přidělení haldy.

Tato funkce ověří jeho parametr. Pokud memblock je ukazatel null, _msize_dbg vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je chyba zpracována, funkce nastaví errnoEINVAL hodnotu -1 a vrátí hodnotu -1.

Požadavky

Rutina Požadovaný hlavičkový soubor
_msize_dbg <crtdbg.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Knihovny

Ladění pouze verzí knihoven runtime jazyka C.

Příklad

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

Výstup

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

Viz také

Rutiny ladění
_malloc_dbg