_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
EINVAL
su e restituisce -1 (18.446.744.073.709.551.615 senza segno).
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