Compartir a través de


_expand

Cambia el tamaño de un bloque de memoria.

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

Parámetros

  • memblock
    Puntero al bloque de memoria previamente asignado.

  • size
    Nuevo tamaño en bytes.

Valor devuelto

_expand devuelve un puntero vacío al bloque de memoria reasignado. _expand, a diferencia de realloc, no puede mover un bloque para cambiar su tamaño. Así, si hay suficiente memoria disponible expandir el bloque sin moverlo, el parámetro de memblock a _expand es igual que el valor devuelto.

_expand devuelve NULL cuando se detecta un error durante la operación. Por ejemplo, si _expand se utiliza para reducir un bloque de memoria, puede detectar daños en el montón o un puntero y un retorno no válidos NULLde bloques de bloque.

Si la memoria disponible no es suficiente expandir el bloque al tamaño especificado sin moverlo, la función devuelve NULL. _expand nunca devuelve un bloque expandido a un tamaño menor que solicitado. Si se produce un error, errno indica la naturaleza del error. Para obtener más información sobre errno, vea errno, _doserrno, _sys_errlist y _sys_nerr.

Los puntos del valor devuelto a un espacio de almacenamiento que se garantiza alinearse convenientemente para el almacenamiento de cualquier tipo de objeto. Para comprobar el nuevo tamaño del elemento, utilice _msize. Para obtener un puntero a un tipo distinto de void, utilice una conversión de tipo del valor devuelto.

Comentarios

Los cambios de función de _expand el tamaño de un bloque de memoria previamente asignado por intentar para expandir o el contrato el bloque sin mover su ubicación en la pila. Los puntos del parámetro de memblock al principio del bloque. El parámetro de size da el nuevo tamaño de bloque, en bytes. El contenido del bloque son sin cambios hasta el menor de los nuevo y antiguo tamaños. memblock no debe ser un bloque se ha liberado que.

Nota

En plataformas de 64 bits, _expand podría no contrato el bloque si el nuevo tamaño sea menor que el tamaño actual; en concreto, si el bloque es menos que 16K de tamaño y por consiguiente asignado en el montón Low Fragmentation, _expand sale del bloque sin cambios y devuelve memblock.

Cuando la aplicación se vincula con una versión de depuración de las bibliotecas en tiempo de ejecución de C, _expand resuelve a _expand_dbg. Para obtener más información sobre cómo la pila se administra durante el proceso de depuración, vea El montón de depuración de CRT.

Esta función valida sus parámetros. Si memblock es un puntero NULL, esta función invoca un controlador no válido de parámetro, tal y como se describe en Validación de parámetros. Si la ejecución puede continuar, errno se establece en EINVAL y la función devuelve NULL. Si size es mayor que _HEAP_MAXREQ, errno se establece en ENOMEM y la función devuelve NULL.

Requisitos

Función

Encabezado necesario

_expand

<malloc.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

Ejemplo

// 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 );
}
  

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

Vea también

Referencia

Asignación de memoria

calloc

free

malloc

_msize

realloc