Partilhar via


_expand_dbg

Redimensiona um bloco especificado de memória na pilha expandindo ou contraindo o bloco (somente versão de depuração).

Sintaxe

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
Novo tamanho solicitado para o bloco (em bytes).

blockType
Tipo solicitado para bloco redimensionado: _CLIENT_BLOCK ou _NORMAL_BLOCK.

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

lineNumber
Número da linha no arquivo de origem onde a operação de expansão foi solicitada ou NULL.

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

Valor de retorno

Após a conclusão bem-sucedida, _expand_dbg retorna um ponteiro para o bloco de memória redimensionado. Como a memória não é movida, o endereço é o mesmo que userData. 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 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.

Observações

A _expand_dbg função é uma versão de depuração da _expand função. Quando _DEBUG não está definido, cada chamada para _expand_dbg é reduzida a uma chamada para _expand. Ambos _expand e redimensionar _expand_dbg um bloco de memória na pilha 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 vazamentos, um parâmetro de tipo de bloco para rastrear tipos de alocação específicos e filename/lineNumber informações para determinar a origem das solicitações de alocação.

_expand_dbg redimensiona o bloco de memória especificado com um pouco mais de espaço do que o solicitado newSize. newSize pode ser maior ou menor do que o tamanho do bloco de memória alocado originalmente. O espaço extra é usado pelo gerenciador de heap de depuração para vincular os blocos de memória de depuração e fornecer ao aplicativo informações de cabeçalho de depuração e buffers de substituição. O redimensionamento é realizado expandindo ou contraindo o bloco de memória original. _expand_dbg não move o bloco de memória, assim como a _realloc_dbg função.

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

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 versões de depuração, consulte Debug versions of heap allocation functions.

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

Requerimentos

Rotina Cabeçalho obrigatório
_expand_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_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 deste programa depende da capacidade do seu computador para expandir todas as seções. Se todas as seções forem expandidas, a saída será refletida na seção Saída.

Consulte também

Rotinas de depuração
_malloc_dbg