Sdílet prostřednictvím


_msize_dbg

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

size_t _msize_dbg(
   void *userData,
   int blockType 
);

Parametry

  • userData
    Blok paměti, pro které chcete určit velikost ukazatele.

  • blockType
    Typ bloku paměti zadaná: _CLIENT_BLOCK nebo _NORMAL_BLOCK.

Vrácená hodnota

Po úspěšném ukončení _msize_dbg vrátí velikost (v bajtech) určenou paměť bloku; v opačném případě vrátí hodnotu NULL.

Poznámky

_msize_dbgje ladicí verzi _Mvelikost funkce.Při _DEBUG není definována, každé volání _msize_dbg na volání _msize.I _msize a _msize_dbg vypočítat velikost bloku paměti haldy základní, ale _msize_dbg přidá dvě funkce ladění: zahrnuje vrácené velikosti vyrovnávací paměti na obou stranách uživatele část bloku paměti a umožňuje výpočty velikosti bloku určité typy.

Informace o jak jsou bloky paměti přidělené, inicializován a spravuje v ladicí verzi základní haldy Správa paměti a ladění haldy.Informace o typech bloku přidělení a jejich použití naleznete v tématu Typy bloky na ladění haldy.Informace o rozdílech mezi volání haldy standardní funkce a její verzi ladění v ladicí verzi aplikace naleznete v tématu pomocí ladění verze Versus the Base verze.

Tato funkce ověřuje jeho parametr.Pokud memblock je nulový ukazatel _msize spustí obslužnou rutinu neplatný parametr popsaným v Ověření parametrů.Pokud zpracování došlo k chybě funkce nastaví errno na EINVAL a vrátí -1.

Požadavky

Rutina

Požadované záhlaví

_msize_dbg

<crtdbg.h>

Další informace o kompatibilitě v tématu Compatibility v úvodu.

Knihovny

Ladění verze C Runtime knihovny pouze.

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ýsledek

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

Ekvivalent v rozhraní .NET Framework

Nelze použít Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.

Viz také

Referenční dokumentace

Ladění rutin

_malloc_dbg