Compartilhar via


_msize_dbg

Calcula o dimensionar de um bloco de memória no heap (somente versão de depurar).

size_t _msize_dbg(
   void *userData,
   int blockType 
);

Parâmetros

  • userData
    Ponteiro para o bloco de memória para o qual você deseja determinar o dimensionar.

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

Valor de retorno

Após a conclusão bem-sucedida, _msize_dbg Retorna o dimensionar (em bytes) do bloco de memória especificada; caso contrário, retorna nulo.

Comentários

_msize_dbg é uma versão de depurar do _msize função.Quando _DEBUG não estiver definido, cada telefonar para _msize_dbg é reduzido a uma telefonar para _msize. Ambos os _msize e _msize_dbg calcular o dimensionar de um bloco de memória no heap de base, mas _msize_dbg adiciona dois recursos de depuração: Ele inclui os buffers em ambos os lados da parte do usuário do bloco de memória no dimensionar retornado e permite que os cálculos de dimensionar para tipos específicos de bloco.

Para obter informações sobre como os blocos de memória são alocados, inicializado e gerenciado na versão de depurar do heap de base, consulte A pilha de depurar e gerenciamento de memória.Para obter informações sobre os tipos de bloco de alocação e como eles são usados, consulte Tipos de blocos no Heap depurar.Para obter informações sobre as diferenças entre chamar uma função de heap padrão e sua versão de depurar em uma compilação de depurar de um aplicativo, consulte Usando a versão de depurar e a versão base.

Esta função valida seu parâmetro.If memblock é um ponteiro nulo, _msize invoca um manipulador de parâmetro inválido, sistema autônomo descrito em Validação de parâmetro. Se o erro é manipulado, a função define errno para EINVAL e retorna -1.

Requisitos

Rotina

Cabeçalho necessário

_msize_dbg

<crtdbg.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Bibliotecas

Versões de depurar de Bibliotecas de time de execução c somente.

Exemplo

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

Saída

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

Equivalente do NET Framework

Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Rotinas de depurar

_malloc_dbg