_expand

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Cambia el tamaño de un bloque de memoria.

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

Parámetros

memblock
Puntero al bloque de memoria asignado previamente.

size
Nuevo tamaño en bytes.

_expandDevuelve un puntero void al bloque de memoria reasignado. _expand, a diferencia de realloc, no se puede mover un bloque para cambiar su tamaño. Por lo tanto, si no hay memoria disponible suficiente para expandir el bloque sin moverlo, el memblock parámetro _expand es igual que el valor devuelto.

_expandDevuelve NULL cuando se detecta un error durante su funcionamiento. Por ejemplo, si _expand es utilizada para reducir un bloque de memoria, podría detectar daños en el montón de bloques pequeños o un puntero de bloque no válido y devolver NULL.

Si hay suficiente memoria expandir el bloque al tamaño determinado sin moverlo, la función devuelve NULL. _expandnunca devuelve un bloque que se expande a un tamaño inferior al solicitado. Si se produce un error, errno indica la naturaleza del error. Para obtener más información acerca de errno, consulte errno, _doserrno, _sys_errlist y _sys_nerr.

El valor devuelto apunta a un espacio de almacenamiento confirmado como correctamente alineado para almacenar 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 un conversión de tipo en el valor devuelto.

El _expand función cambia el tamaño de un bloque de memoria asignado previamente al intentar expandir o contraer el bloque sin mover su ubicación en el montón. El memblock parámetro apunta al principio del bloque. El size parámetro indica el nuevo tamaño del bloque, en bytes. El contenido del bloque se modifican hasta el más corto de los tamaños nuevos y antiguos. memblockno debe ser un bloque que se ha liberado.

System_CAPS_ICON_note.jpg Nota

En plataformas de 64 bits, _expand no se puede contratar el bloque si el nuevo tamaño es menor que el tamaño actual; en concreto, si el bloque era menor que 16 KB de tamaño y, por tanto, se asigna en el montón de fragmentación baja, _expand abandona el bloque sin cambios y devuelve memblock.

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

Esta función valida sus parámetros. Si memblock es un puntero nulo, esta función invoca un controlador de parámetros no válidos, como se describe en validación del parámetro. 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 está establecido en ENOMEM y la función devuelve NULL.

FunciónEncabezado necesario
_expand<malloc.h>

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

// 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  

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.

Asignación de memoria
calloc
liberar
malloc
_msize
realloc

Mostrar: