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


realloc

Reallocate блоки памяти.

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

Параметры

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

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

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

realloc возвращает a void указатель на reallocated (и, возможно, перемещена) блок памяти.

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

If size нулю, то на блоки указанн memblock освобождает; возвращаемое значение NULLи memblock левый указывать на освобоженном блоке.

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

Заметки

realloc изменения функции размер выделенного блока памяти.memblock указывает аргумента в начало блока памяти.If memblock существует NULL" realloc ведет себя таким же способом, как malloc и выделяет новый блок size байты.If memblock нет NULLэто должен быть указателем возвращенный предыдущим вызовом метода calloc" mallocили realloc.

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

realloc наборы errno В ENOMEM, если выделение памяти завершается неудачей или, если объем памяти превышает требуемый _HEAP_MAXREQ.Дополнительные сведения об этом и других кодах ошибок см. в разделе errno, _doserrno, _sys_errlist и _sys_nerr.

reallocвызовы mallocиспользование C++ _set_new_mode функция, чтобы установить новый режим ядра.Новый режим ядра, указывающее, является ли при ошибке malloc новая процедура вызова обработчика в виде набора by _set_new_handler.По умолчанию malloc не вызывает новую процедуру обработчика при сбое выделить память.Можно переопределить используемую по умолчанию функциональности, что, когда realloc не удалось выделить память. malloc вызывает новую процедуру обработчика тем же способом, new оператор делает, если он завершается ошибкой для этой же причине.Переопределить значения по умолчанию, вызов

_set_new_mode(1)

в начале одну программу или ссылка со NEWMODE.OBJ (см. Параметры соединения).

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

realloc помечает __declspec(noalias) и __declspec(restrict), чтобы гарантированно изменяет функция глобальные переменные и присвоен псевдоним возвращенный указатель.Дополнительные сведения см. в разделе noalias и ограничьте.

Требования

Процедура

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

realloc

<stdlib.h> и <malloc.h>

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

Пример

// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
 

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

int main( void )
{
   long *buffer, *oldbuffer;
   size_t size;

   if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
      exit( 1 );

   size = _msize( buffer );
   printf_s( "Size of block after malloc of 1000 longs: %u\n", size );

   // Reallocate and show new size:
   oldbuffer = buffer;     // save pointer in case realloc fails
   if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) )) 
        ==  NULL )
   {
      free( oldbuffer );  // free original block
      exit( 1 );
   }
   size = _msize( buffer );
   printf_s( "Size of block after realloc of 1000 more longs: %u\n", 
            size );

   free( buffer );
   exit( 0 );
}
  

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

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

См. также

Ссылки

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

calloc

free

malloc