_msize_dbg
Calcula el tamaño de un bloque de memoria del montón (solo versión de depuración).
Sintaxis
size_t _msize_dbg(
void *userData,
int blockType
);
Parámetros
userData
Puntero al bloque de memoria cuyo tamaño se va a determinar.
blockType
Tipo del bloque de memoria especificado: _CLIENT_BLOCK
o _NORMAL_BLOCK
.
Valor devuelto
Al finalizar correctamente, _msize_dbg
devuelve el tamaño (en bytes) del bloque de memoria especificado; en caso contrario, devuelve NULL
.
Comentarios
_msize_dbg
es una versión de depuración de la función _msize
. Cuando _DEBUG
no se define, cada llamada a se reduce a _msize_dbg
una llamada a _msize
. _msize
y _msize_dbg
calculan el tamaño de un bloque de memoria del montón base, pero _msize_dbg
agrega dos características de depuración: incluye los búferes situados a cada lado de la parte del usuario del bloque de memoria en el tamaño devuelto y permite calcular el tamaño de tipos de bloques concretos.
Para obtener información sobre cómo se asignan, inicializan y administran los bloques de memoria en la versión de depuración del montón base, consulte Detalles del montón de depuración de CRT. Para obtener información sobre los tipos de bloques de asignación y cómo se usan, consulte Tipos de bloques en el montón de depuración. Para obtener información sobre las diferencias entre las funciones de montón estándar y las versiones de depuración, consulte Depuración de versiones de funciones de asignación de montón.
Esta función valida su parámetro. Si memblock
es un puntero nulo, _msize_dbg
invoca un controlador de parámetros no válidos, como se describe en Validación de parámetros. Si se controla el error, la función establece errno
EINVAL
en y devuelve -1 (18 446 744 073 709 551 615 sin signo).
Requisitos
Routine | Encabezado necesario |
---|---|
_msize_dbg |
<crtdbg.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Bibliotecas
Solo versiones de depuración de las bibliotecas en tiempo de ejecución de C.
Ejemplo
// 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