Condividi tramite


_msize_dbg

Calcola le dimensioni di un blocco di memoria nell'heap (solo versione di debug).

size_t _msize_dbg( 
   void *userData, 
   int blockType  
);

Parametri

  • userData
    Puntatore al blocco di memoria per il quale determinare la dimensione.

  • blockType
    Tipo di blocco di memoria specificato: _CLIENT_BLOCK o _NORMAL_BLOCK.

Valore restituito

Al termine, _msize_dbg restituisce la dimensione in byte del blocco di memoria specificato; in caso contrario restituisce NULL.

Note

_msize_dbg è una versione di debug della funzione _msize. Quando _DEBUG non è definito, ogni chiamata a _msize_dbg viene ridotta ad una chiamata a _msize. Sia _msize che _msize_dbg calcola le dimensioni di un blocco di memoria nell'heap di base, ma _msize_dbg aggiunge due funzionalità di debug: include i buffer presenti da entrambi i lati della parte del blocco di memoria nella dimensione restituita e consente di eseguire calcoli di dimensioni per i tipi di blocco specifici.

Per informazioni su come i blocchi di memoria allocati, vengono inizializzati e vengono gestiti nella versione di debug dell'heap di base, vedere Informazioni dettagliate sull'heap di debug CRT. Per informazioni sui tipi di blocchi di allocazione e su come vengono utilizzati, consultare Tipi di blocchi sull'heap di debug. Per informazioni sulle differenze tra chiamare una funzione standard dell'heap e la versione di debug in una build di debug di un'applicazione, consultare Versioni di debug di funzioni di allocazione heap.

Questa funzione convalida il parametro. Se memblock è un puntatore null, _msize richiama un gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'errore viene gestito, la funzione imposta errno a EINVAL e restituisce -1.

Requisiti

Routine

Intestazione obbligatoria

_msize_dbg

<crtdbg.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.

Librerie

Solo versioni di debug di Librerie di runtime C.

Esempio

// 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

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

Routine di debug

_malloc_dbg