Compartilhar via


_expand

Altera o tamanho de um bloco de memória.

void *_expand( 
   void *memblock,
   size_t size 
);

Parâmetros

  • memblock
    Ponteiro para o bloco de memória alocada anteriormente.

  • size
    Novo tamanho em bytes.

Valor de retorno

_expandRetorna um ponteiro nulo para o bloco de memória realocada._expand, ao contrário do realloc, não é possível mover um bloco para alterar seu tamanho.Portanto, se não houver memória suficiente disponível para expandir o bloco sem movê-lo, o memblock parâmetro para _expand é o mesmo que o valor de retorno.

_expandRetorna NULL quando um erro é detectado durante sua operação.Por exemplo, se _expand é usado para reduzir um bloco de memória, ele pode detectar a corrupção no heap de blocos pequenos ou um ponteiro de bloco inválido e retornar NULL.

Se houver memória suficiente disponível para expandir o bloco para o tamanho de sem movê-lo, a função retornará NULL._expandnunca retorna um bloco expandido para um tamanho menor que o solicitado.Se ocorrer uma falha, errno indica a natureza da falha.Para obter mais informações sobre o errno, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

O valor de retorno aponta para um espaço de armazenamento que é garantido para ser devidamente alinhado para o armazenamento de qualquer tipo de objeto.Para verificar o novo tamanho do item, use _msize.Para obter um ponteiro para um tipo diferente de void, use um tipo de projeção no valor de retorno.

Comentários

O _expand função altera o tamanho de um bloco de memória alocada previamente tentando expandir ou contrair o bloco sem mover seu local na pilha.O memblock parâmetro aponta para o início do bloco.O size parâmetro fornece o novo tamanho do bloco, em bytes.O conteúdo do bloco está inalterado até o menor dos tamanhos de novos e antigos.memblocknão deve ser um bloco que tinha sido liberado.

ObservaçãoObservação

Em plataformas de 64 bits, _expand não pode contrair o bloco se o novo tamanho for menor que o tamanho atual. em particular, se o bloco foi menos de 16 K de tamanho e, portanto, são alocados no Heap de fragmentação de baixo, _expand deixa o bloco inalterado e retorna memblock.

Quando o aplicativo está vinculado com uma versão de depuração das bibliotecas de tempo de execução C, _expand resolve para _expand_dbg.Para obter mais informações sobre como a pilha é gerenciada durante o processo de depuração, consulte A pilha de depuração CRT.

Esta função valida seus parâmetros.Se memblock é um ponteiro nulo, 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.Se size é maior do que _HEAP_MAXREQ, errno for definido como ENOMEM e a função retornará NULL.

Requisitos

Função

Cabeçalho necessário

_expand

<malloc.h>

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

Exemplo

// crt_expand.c

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

int main( void )
{
   char *bufchar;
   printf( "Allocate a 512 element buffer\n" );
   if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
      exit( 1 );
   printf( "Allocated %d bytes at %Fp\n", 
         _msize( bufchar ), (void *)bufchar );
   if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
      printf( "Can't expand" );
   else
      printf( "Expanded block to %d bytes at %Fp\n", 
            _msize( bufchar ), (void *)bufchar );
   // Free memory 
   free( bufchar );
   exit( 0 );
}
  

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

Alocação de memória

calloc

livre

malloc

_msize

possível realocar