Практика программирования (Бейсик, Си, Паскаль)



Контейнер для стружки смотрите на prioritetpro.ru. |

Статические и динамические массивы - часть 2


q=(тип_q *)farmalloc(n_byte); //запрос памяти в дальней "куче"

q new=realloc(q_old,n_byte); //изменение размера блока

q_new=farrealloc(q_old,n_byte); //изменение размера блока

free(q); //освобождение памяти

farfree(q); //освобождение памяти

В приведенных выше обращениях q обозначает указатель на тип данных элементов массива, заменяющий имя массива. Параметры n_el и s_el задают соответственно количество элементов в массиве и длину каждого элемента в байтах. Параметр n_byte определяет количество запрашиваемых байтов.

Максимальный размер сегмента памяти, предоставляемого в ближней "куче", равен 65 521 байт. Добавка far означает, что программа использует дальние указатели типа far или huge, которые позволяют адресоваться к дальней "куче" и использовать сегменты размером более 64 Кбайт. Любая функция выделения памяти возвращает начальный адрес или "нулевой" указатель (NULL) в случае отсутствия свободной памяти запрашиваемого размера. Для того чтобы нормально работать с предоставленным фрагментом памяти, возвращаемый адрес обязательно должен быть приведен к типу указателя q.

Функция realloc (farreallioc) позволяет перераспределить ранее выделенную память. При этом новый размер массива может быть как меньше предыдущего, так и больше. Если система выделит память в новом месте, то все предыдущие значения, к которым программа обращалась по указателю q_old, будут переписаны на новое место автоматически.

В новых версиях Borland C++ появились две более удобные процедуры для запроса и освобождения памяти, не нуждающиеся в дополнительном указании о приведении типа возвращаемого адреса:

q=new тип[n_е1]; //запрос памяти под массив из n_e1 элементов;

q=new тип; //запрос памяти под скалярную переменную;

delete q[n_e1]; //освобождение памяти, занятой массивом;

delete q; //освобождение памяти, занятой массивом или

//скалярной переменной;.

Для формирования в Паскале динамического массива с элементами определенного типа с таким массивом надо связать соответствующий указатель и обратиться к процедуре New:




Содержание  Назад  Вперед