Выход за пределы памяти
printf("Out of memory. Press any key: "); getch(); exit(1); }
9.3. Функция realloc() Прототип функции с необходимой библиотекой имеет вид #include <stdlib.h> void *realloc(void *ptr, size_t size); В стандарте С89 функция realloc() изменяет размер блока ранее выделенной памяти, адресуемой указателем *ptr в соответствии с заданным размером size [1]. Значение параметра size может быть больше или меньше, чем перераспределяемая область. Функция realloc() возвращает указатель на блок памяти, поскольку не исключена необходимость перемещения этого блока. В таком случае содержимое старого блока (до size байтов) копируется в новый блок. Если новый размер памяти больше старого, дополнительное пространство не инициализируется [2]. Если запрос невыполним, то функция распределения памяти realloc() возвращает нулевой указатель NULL. Функция realloc() позволяет перераспределить ранее выделенную память. При этом новый размер массива может быть как меньше предыдущего, так и больше него. Если система выделит память в новом месте, то все предыдущие значения, к которым программа обращалась по указателю *ptr, будут переписаны на новое место автоматически.
9.4. Функция free() Прототип функции с необходимой библиотекой имеет вид #include <stdlib.h> void free(void *ptr); Функция free() возвращает в динамически распределяемую область памяти блок, адресуемый указателем *ptr, после чего эта память становится доступной для выделения в будущем [1]. Вызов функции free() должен выполняться только с указателем, который был получен ранее в результате вызова одной из функций динамического распределения памяти. Использование недопустимого указателя при вызове, скорее всего, приведет к разрушению механизма управления памятью и, возможно, вызовет крах системы [1].
|