_expand_dbg

Redimensiona um bloco de memória na pilha de especificado por expansão ou contração do bloco (somente versão de depurar).

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

  • newSize
    Solicitada novo dimensionar para o bloco (em bytes).

  • blockType
    Solicitado tipo de bloco redimensionado: _CLIENT_BLOCK ou _NORMAL_BLOCK.

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

  • linenumber
    Linha número no arquivo de fonte em que a operação de expandir foi solicitada ou NULL.

The filename e linenumber parâmetros só estão disponível quando _expand_dbg tiver sido explicitamente chamado ou a _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. sistema autônomo a memória não é movida, o endereço é igual a userData.Se ocorreu um erro ou o bloco não foi possível expandir o dimensionar solicitado, ela 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

The _expand_dbg função é uma versão de depurar do _expandir função.Quando _DEBUG não estiver definido, cada telefonar para _expand_dbg é reduzido a uma telefonar para _expand. Ambos os _expand e _expand_dbg Redimensionar um bloco de memória no heap de base, mas _expand_dbg acomoda vários recursos de depuração: buffers em ambos os lados da parte do usuário do bloco para testar se há vazamentos, um bloco de parâmetro para controlar os tipos de alocação específica e de tipofilename/linenumber informações para determinar a origem de solicitações de alocação.

_expand_dbg Redimensiona o bloco de memória especificada com um pouco mais espaço que o solicitado newSize. newSize pode ser maior ou menor que o dimensionar do bloco de memória alocada originalmente. O espaço adicional é usado pelo Gerenciador de heap de depurar para vincular os blocos de memória de depurar e para fornecer o aplicativo com informações de cabeçalho de depurar e substituir os buffers.O redimensionar é feito por meio da expansão ou contração o bloco de memória original._expand_dbg não move o bloco de memória sistema autônomo faz a _realloc_dbg função.

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

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 os parâmetros.If memblock é um ponteiro nulo, ou se o dimensionar é maior que _HEAP_MAXREQ, essa função chama um manipulador de parâmetro inválido, sistema autônomo descrito em Validação de parâmetro. If execution is allowed to continue, errno is set to EINVAL and the function returns 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 depurar de Bibliotecas de time 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 );
}

Size of block after _malloc_dbg of 40 longs: 160 Size of block after _expand_dbg of 1 more long: 164

Comment

A saída do 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 '.

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