Compartilhar via


_expand_dbg

Redimensiona um bloco de memória especificado no heap a expansão ou redução do bloco (versão de depuração somente).

void *_expand_dbg( 
   void *userData,
   size_t newSize,
   int blockType,
   const char *filename,
   int linenumber 
);

Parâmetros

  • userData
    Ponteiro para o bloco de memória anteriormente atribuído.

  • newSize
    Novo tamanho solicitado para o bloco (em bytes).

  • blockType
    O tipo solicitado para o bloco redimensionado: _CLIENT_BLOCK ou _NORMAL_BLOCK.

  • filename
    O ponteiro para o nome do arquivo de origem que solicitou expanda a operação ou o NULL.

  • linenumber
    Número de linha no arquivo de origem em que a operação foi solicitada ou expanda NULL.

Os parâmetros de filename e de linenumber só estão disponíveis quando _expand_dbg esteve chamado explicitamente ou a constante de pré-processador de _CRTDBG_MAP_ALLOC esteve definida.

Valor de retorno

Na conclusão bem-sucedida, _expand_dbg retorna um ponteiro para o bloco de memória redimensionado. Como a memória não são movidos, o endereço é o mesmo que o userData. Se um erro ocorreu ou o bloco não pode ser expandido para o tamanho solicitado, retorna NULL. Se ocorrer uma falha, errno é com informações do sistema operacional sobre a natureza da falha. Para obter mais informações sobre errno, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

Comentários

A função de _expand_dbg é uma versão de depuração da função deexpanda _. Quando _DEBUG não for definido, cada chamada a _expand_dbg será reduzido para uma chamada a _expand. _expand e _expand_dbg são redimensionados um bloco de memória heap de base, mas _expand_dbg acomode vários recursos de depuração: buffers em ambos os lados da parte do usuário do bloco para testar que ignora, um parâmetro em blocos para controlar tipos específicos de alocação, e filename/informações delinenumber determina a origem de solicitações de alocação.

_expand_dbg redimensiona o bloco de memória especificado com um pouco mais espaço do que newSizesolicitado. newSize pode ser maior ou menor que o tamanho do bloco de memória alocada originalmente. O espaço adicional é usado pelo gerenciador de heap de depuração para vincular os blocos de memória de depuração e fornecer o aplicativo com informações de cabeçalho de depuração e para substituir os buffers. Redimensionar é realizado expandindo ou reduzindo o bloco de memória original. _expand_dbg não move o bloco de memória, como faz a função de _realloc_dbg .

Quando newSize é maior que o tamanho do bloco original, o bloco de memória é expandido. Durante uma expansão, se o bloco de memória não pode ser expandido para acomodar o tamanho solicitado, NULL é retornado. Quando newSize for menor que o tamanho do bloco original, o bloco de memória será reduzido até que o novo tamanho seja obtido.

Para obter informações sobre como os blocos de memória são atribuídos, inicializados, e gerenciados na versão de depuração da heap de base, consulte Detalhes da pilha de depuração CRT. Para obter informações sobre o bloco de alocação digitar e como elas são usadas, consulte Tipos de blocos no heap de depuração. Para obter informações sobre as diferenças entre chamar uma função padrão do heap e sua versão de depuração em uma compilação de depuração de um aplicativo, consulte Versões de depuração das funções de alocação da pilha.

Essa função valida seus parâmetros. Se memblock for um ponteiro nulo, ou se o tamanho for maior que _HEAP_MAXREQ, essa função invoca um manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro. Se a execução puder continuar, errno será definido como EINVAL e a função retornará NULL.

Requisitos

Rotina

Cabeçalho necessário

_expand_dbg

<crtdbg.h>

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

Bibliotecas

Versões de depuração das Bibliotecas em tempo de execução C somente.

Exemplo

// crt_expand_dbg.c
//
// 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 _expand_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;
   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 );

   // Expand the buffer using _expand_dbg and show the new size
   buffer = (long *)_expand_dbg( buffer, size + sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );

   if( buffer == NULL )
      exit( 1 );
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _expand_dbg of 1 more long: %u\n",
           size );

   free( buffer );
   exit( 0 );
}
  

Comment

A saída deste programa dependem da capacidade do do computador de expanda todas as seções a seguir. Se todas as seções são expandidas, a saída são refletidas na seção de saída.

Equivalência do .NET Framework

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

Consulte também

Referência

Rotinas de depuração

_malloc_dbg