Condividi tramite


_msize_dbg

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

Sintassi

size_t _msize_dbg(
   void *userData,
   int blockType
);

Parametri

userData
Puntatore al blocco di memoria per il quale determinare le dimensioni.

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

Valore restituito

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

Osservazioni:

_msize_dbg è una versione di debug della funzione _msize . Quando _DEBUG non è definito, ogni chiamata a _msize_dbg viene ridotta a una chiamata a _msize. Sia _msize che _msize_dbg calcolano le dimensioni di un blocco di memoria nell'heap di base, ma _msize_dbg aggiunge due funzionalità di debug: include i buffer su entrambi i lati della parte utente del blocco di memoria nelle dimensioni restituite e consente i calcoli delle dimensioni per tipi di blocchi specifici.

Per informazioni sulla modalità di allocazione, inizializzazione e gestione dei blocchi di memoria nella versione di debug dell'heap di base, vedere Dettagli dell'heap di debug CRT. Per informazioni sui tipi di blocchi di allocazione e sul modo in cui vengono usati, vedere Tipi di blocchi nell'heap di debug. Per informazioni sulle differenze tra le funzioni heap standard e le versioni di debug, vedere Eseguire il debug delle versioni delle funzioni di allocazione dell'heap.

Questa funzione convalida il relativo parametro. Se memblock è un puntatore Null, _msize_dbg richiama un gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'errore viene gestito, la funzione imposta errno su EINVAL e restituisce -1.

Requisiti

Ciclo Intestazione obbligatoria
_msize_dbg <crtdbg.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Librerie

Solo le versioni di debug delle librerie di runtime di 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

Vedi anche

Routine di debug
_malloc_dbg