Поделиться через


_expand

Изменяет размер блока памяти.

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

Параметры

  • memblock
    Указатель к ранее выбранному блок памяти.

  • size
    Новый размер в байтах.

Возвращаемое значение

_expand возвращает пустой reallocated указатель на блок памяти._expand, непохоже reallocне удалось переместить группу, чтобы изменить его размер.Таким образом, если достаточно памяти, чтобы развернуть без его перемещения, блок memblock параметр _expand это же, как возвращаемое значение.

_expand возвращает NULL при обнаружении ошибки во время своей работы.Например, если _expand используется для сжатия блок памяти, он может обнаружить повреждение в небольшой куче блока или недопустимом указателя блока и возврата NULL.

Если недостаточно памяти, чтобы развернуть блок к заданному размеру без его перемещения, то функция возвращает NULL._expand никогда не возвращает развернутый блок до размера меньше запрошенного.Если произошел сбой, errno показывающее природу ошибки.Дополнительные сведения о errno см. в разделе errno, _doserrno, _sys_errlist и _sys_nerr.

Указывает возвращаемого значения к объему хранения, который гарантированно подходяще выравниваются для хранения любого типа объекта.Чтобы проверить новый размер элемента, используйте _msize.Получить указатель на тип, отличный от voidиспользуйте приведение типов в возвращаемом значении.

Заметки

_expand изменения функции размер ранее выделенного блока памяти при попытке развернуть или контракт блока без перемещения его расположение в куче.memblock элементы параметра в начало блока.size параметр дает новый размер блока в байтах.Содержимое блока не меняются на небольшой новых и старых размеры.memblock не следует блок, освобождается.

ПримечаниеПримечание

На 64-разрядных платформах, 64 _expand контракт степень не блок если новый размер, чем текущий размер; в частности, если блок был меньше 16K в размере и, следовательно, выбранное в куче, низкой фрагментации _expand покидает блок и возвращается без изменений memblock.

При связывании с отладочной версией библиотеки времени выполнения c _expand позволяет к _expand_dbg.Дополнительные сведения об управляемой куче во время процесса отладки см. в разделах Куча отладки для CRT.

Эта функция проверяет его параметры.If memblock является указателем null, эта функция вызывает обработчик недопустимого параметра, как описано в разделе Проверка параметров.Если выполнение может продолжить, errno равно EINVAL и функция возвращает NULL.If size больше _HEAP_MAXREQ" errno равно ENOMEM и функция возвращает NULL.

Требования

Функция

Обязательный заголовок

_expand

<malloc.h>

Дополнительные сведения о совместимости см. Совместимость во введении.

Пример

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

Эквивалент в .NET Framework

Неприменимо. Для c# используйте стандартная функция PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Выделение памяти

calloc

free

malloc

_msize

realloc