_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. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.