Partilhar via


_msize_dbg

Calcula o tamanho de um bloco de memória na pilha (somente versão de depuração).

Sintaxe

size_t _msize_dbg(
   void *userData,
   int blockType
);

Parâmetros

userData
Ponteiro para o bloco de memória para o qual determinar o tamanho.

blockType
Tipo do bloco de memória especificado: _CLIENT_BLOCK ou _NORMAL_BLOCK.

Valor de retorno

Após a conclusão bem-sucedida, retorna o tamanho (em bytes) do bloco de memória especificado, caso contrário, _msize_dbg ele retorna NULL.

Observações

_msize_dbg é uma versão de depuração da _msize função. Quando _DEBUG não está definido, cada chamada para _msize_dbg é reduzida a uma chamada para _msize. Ambos _msize e _msize_dbg calcular o tamanho de um bloco de memória na pilha base, mas _msize_dbg adiciona dois recursos de depuração: Inclui os buffers em ambos os lados da parte do usuário do bloco de memória no tamanho retornado e permite cálculos de tamanho para tipos de bloco específicos.

Para obter informações sobre como os blocos de memória são alocados, inicializados e gerenciados na versão de depuração do heap base, consulte Detalhes do heap de depuração CRT. Para obter informações sobre os tipos de bloco de alocação e como eles são usados, consulte Tipos de blocos na pilha de depuração. Para obter informações sobre as diferenças entre funções de heap padrão e as versões de depuração, consulte Debug versions of heap allocation functions.

Esta função valida o seu parâmetro. Se memblock for um ponteiro nulo, _msize_dbg invoca um manipulador de parâmetros inválido, conforme descrito em Validação de parâmetro. Se o erro for manipulado, a função será definida errno como EINVAL e retornará -1 (18.446.744.073.709.551.615 não assinados).

Requerimentos

Rotina Cabeçalho obrigatório
_msize_dbg <crtdbg.h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade.

Libraries

Depure apenas versões de bibliotecas de tempo de execução C .

Example

// 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 );
}

Resultado

Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320

Consulte também

Rotinas de depuração
_malloc_dbg