_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.