Compartilhar via


_expand_dbg

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

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 alocada anteriormente.

  • newSize
    Solicitou um novo tamanho para o bloco (em bytes).

  • blockType
    Solicitou um tipo de bloco redimensionado: _CLIENT_BLOCK ou _NORMAL_BLOCK.

  • filename
    Ponteiro para o nome do arquivo de origem que solicitou expandir a operação ou NULL.

  • linenumber
    O número no arquivo de origem onde a operação de expansão foi solicitada de linha ou NULL.

O filename e linenumber parâmetros estão disponíveis somente quando _expand_dbg foi chamado explicitamente ou o _CRTDBG_MAP_ALLOC pré-processador constante foi definida.

Valor de retorno

Após a conclusão bem-sucedida, _expand_dbg retorna um ponteiro para o bloco de memória redimensionada.Porque a memória não é movida, o endereço é o mesmo que os dados do usuário.Se ocorreu um erro ou o bloco não pôde ser expandido para o tamanho solicitado, ele retornará NULL.Se ocorrer uma falha, errno é com as informações do sistema operacional sobre a natureza da falha.Para obter mais informações sobre o errno, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

Comentários

O _expand_dbg função é uma versão de depuração do _Expandir função.Quando _ Debug não está definido, cada chamada para _expand_dbg é reduzido a uma chamada para _expand.Ambos _expand e _expand_dbg redimensionar um bloco de memória na pilha de base, mas _expand_dbg acomoda os vários recursos de depuração: buffers em ambos os lados da parte do bloco para testar se há vazamento, um parâmetro de tipo de bloco para controlar os tipos de alocação específica de usuário e filename/linenumber informações para determinar a origem de solicitações de alocação.

_expand_dbgredimensiona o bloco de memória especificada com um pouco mais espaço que o solicitado newSize.newSizepode ser maior ou menor que o tamanho do bloco de memória alocada originalmente.O espaço adicional é usado pelo Gerenciador de heap do debug para vincular os blocos de memória de depuração e para fornecer o aplicativo com informações de cabeçalho de depuração e sobrescrever os buffers.O redimensionamento é realizado pela expansão ou contração o bloco de memória original._expand_dbgnão se mover o bloco de memória, como faz o _realloc_dbg função.

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

Para obter informações sobre como blocos de memória são alocados, inicializados e gerenciados na versão de depuração da pilha base, consulte Gerenciamento de memória e a pilha de depuração.Para obter informações sobre os tipos de bloco de alocação e como eles são usados, consulte Tipos de blocos no Heap Debug.Para obter informações sobre as diferenças entre chamar uma função de heap padrão e sua versão de depuração em uma compilação de depuração de um aplicativo, consulte usando a depurar versão na Base de versão.

Esta função valida seus parâmetros.Se memblock é um ponteiro nulo, ou se o tamanho é maior que _HEAP_MAXREQ, essa função chama um manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, errno for definido como EINVAL e a função retornará NULL.

Requisitos

Rotina

Cabeçalho necessário

_expand_dbg

<crtdbg.h>

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

Bibliotecas

Versões de depuração de bibliotecas de 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 depende da capacidade do seu computador para expandir todas as seções.Se todas as seções são expandidas, a saída será refletida na seção ' saída '.

Equivalência do .NET Framework

Não aplicável. Para chamar 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 depuração

_malloc_dbg