Share via


_msize_dbg

Calcula el tamaño de un bloque de memoria del montón (versión de depuración solo).

size_t _msize_dbg(
   void *userData,
   int blockType 
);

Parámetros

  • userData
    Puntero al bloque de memoria para determinar el tamaño.

  • en bloques
    Tipo de bloque de memoria especificado: _CLIENT_BLOCK o _NORMAL_BLOCK.

Valor devuelto

Cuando se complete correctamente, _msize_dbg devuelve el tamaño (en bytes) del bloque de memoria especificado; si no devuelve NULL.

Comentarios

_msize_dbg es una versión de depuración de la función demsize de _.Cuando _DEBUG no está definido, cada llamada a _msize_dbg se reduce a 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 del tamaño devuelto y permite los cálculos de tamaño de los tipos de bloques de concreto.

Para obtener información sobre cómo los bloques de memoria se asignan, inicialice, y se administran en la versión de depuración del montón base, vea Administración de memoria y el montón de depuración.Para obtener información sobre la asignación bloquee los tipos y cómo se utilizan, vea Tipos de bloques del montón de depuración.Para obtener información sobre las diferencias entre llamar a una función estándar de la pila y la versión de depuración en una compilación de depuración de una aplicación, vea Con la versión Versus de depuración la versión base.

esta función valida su parámetro.Si memblock es un puntero NULL, _msize invoca un controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si se utiliza el error, la función establece errno a EINVAL y devuelve -1.

Requisitos

rutina

Encabezado necesario

_msize_dbg

<crtdbg.h>

Para obtener más información de compatibilidad, vea compatibilidad en la Introducción.

bibliotecas

Versiones de depuración de Bibliotecas en tiempo de ejecución de C únicamente.

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

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

Vea también

Referencia

Rutinas de depuración

_malloc_dbg