Выделить, перевыделить или освободить область памяти
#include <malloc.h>void * _srealloc( void *ptr,size_t old_size,size_t new_size );
NULL
или указатель на блок памяти, который вы хотите перераспределить.libc
Когда значение аргумента ptr равно NULL
, выделяется новый блок памяти размером new_size байт.
Если значение new_size равно нулю, соответствующая функция _sfree() вызывается для освобождения old_size байты памяти, на которые указывает ptr.
Иначе функция _srealloc() перераспределяет выделенную ранее память, выполнив одно из следующих действий:
Не используйте указатели на ранее выделенные блоки после вызова этой функции. Эти указатели возможно будут указывать на освобожденную память. Это может привести к катастрофическими последствиями, после выделения нового блока. |
Функция возвращает NULL
, если память, на которую указывает ptr, не может быть перераспределена. В этом случае память, на которую указывает ptr, не освобождается, поэтому обязательно сохраните указатель на старый блок памяти.
buffer = (char *)_srealloc( buffer, 100, 200 );
В приведенном выше примере буфер может быть устанавлен в NULL
, если функция будет выполнена с ошибкой, и указатель на ранее выделенную память больше не будет указывать на блок выделенной памяти. Если буфер - единственный указатель на блок памяти, то доступ к этой памяти потерян.
Функция _srealloc() перераспределяет память из кучи.
Вы должны использовать _sfree(), чтобы освободить память, выделенную _srealloc().
Указатель на начало перераспределенной памяти или NULL
, если доступной памяти недостаточно, или если значение аргумента new_size равно нулю.
ЗОСРВ «Нейтрино»
calloc(), free(), realloc(), _scalloc(), _sfree(), _smalloc()
Предыдущий раздел: Описание API системной библиотеки