Compartilhar via


_expand

Altera o dimensionar de um bloco de memória.

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

Parâmetros

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

  • size
    Novo dimensionar em bytes.

Valor de retorno

_expand Retorna um ponteiro nulo para o bloco de memória realocada. _expand, ao contrário realloc, não é possível mover um bloco para alterar seu dimensionar. Portanto, se há memória suficiente disponível para expandir o bloco sem movê-lo, a memblock parâmetro para _expand é o mesmo sistema autônomo o valor retornado.

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

Se não há memória suficiente disponível para expandir o bloco para determinado dimensionar sem movê-lo, a função retornará NULL. _expand nunca retorna um bloco expandido para um dimensionar menor que 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 retornado aponta para um espaço de armazenamento que é garantido a ser alinhado adequadamente para o armazenamento de qualquer tipo de objeto.Para verificar o novo dimensionar do item, use _msize. Ao obter um apontador para um tipo diferente de void, use um tipo convertido no valor retornado.

Comentários

The _expand função altera o dimensionar de um bloco de memória alocada anteriormente pela tentativa expandir ou contrato bloco sem mover seu local na pilha. The memblock parâmetro aponta para o início do bloco de. The size parâmetro fornece o novo dimensionar de bloco, em bytes. O Sumário do bloco está inalterado até o menor dos tamanhos de novos e antigos.memblock não deve ser um bloco que foi liberado.

Observação:

Em plataformas de 64 bit, _expand não pode contrair o bloco de se o novo dimensionar for menor que o dimensionar corrente; em particular, se o bloco foi menos de 16 K de dimensionar e, portanto, alocado na heap de fragmentação baixa, _expand sai do bloco inalterado e retorna memblock.

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

Esta função valida os parâmetros.If 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 for permitida para continuar, errno é definido como EINVAL e a função retorna NULL. If size é maior que _HEAP_MAXREQ, errno é definido como ENOMEM e a função retorna NULL.

Requisitos

Função

Cabeçalho necessário

_expand

<malloc.h>

Para obter informações adicionais 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 );
}

Allocate a 512 element buffer Allocated 512 bytes at 002C12BC Expanded block to 1024 bytes at 002C12BC

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

Alocação de memória

calloc

disponível

malloc

_msize

realocar