1. Функция coreleft() позволяет определить общий объем динамической памяти, доступный программе к моменту ее (функции) вызова и имеет заголовок:
unsignedlongcoreleft(void).
2. Функция malloc() – предназначена для выделения участка памяти размером, который задается функции через ее аргумент.
Заголовок функции malloc() : void * malloc(size_t size) .
В соответствии с заголовком функция возвращает указатель на объект любого типа, а единственный формальный параметр size предназначен для размера памяти, необходимой для размещения данных. Тип формального параметра – size_t, это специальный тип: тип результата, порождаемого операцией вычисления размера объекта sizeof(). Тип size_t определен в <stdlib.h> как некоторый целый без знака.
После вызова функция malloc() осуществляет в области динамической памяти (куче - heap) поиск непрерывного участка памяти заданного размера и при успешном выполнении возвращает начальный адрес найденного участка, т.е. адрес первого байта из найденных. Если в динамически распределяемой области памяти недостаточно свободной памяти для выполнения запроса, то функция malloc() возвращает NULL.
Для правильного вычисления размера памяти (а значит, для корректной работы программы в разных реализациях) следует использовать операцию sizeof(), определяющую размер одного объекта определенного типа из всей совокупности объектов, для которых запрашивается память.
Допустим, следует выделить участок памяти для N объектов типа type. Если тип type не является базовым или допустимым производным (в частности, указателем на любой тип), то он должен быть определен в программе предварительно. Значение переменной N , имеющее тип int, должно быть вычислено перед вызовом функции malloc() с фактическим параметром – выражением N* sizeof(type). В данном выражении вместо N можно использовать любые другие выражения, но с непременными условиями:
· каждое из допустимых выражений использует константы или переменные, значения которых определены до вызова функции malloc();
· тип результата в допустимых выражениях – int.
Функции malloc() вернет в точку вызова начальный адрес выделенного участка памяти размера N* sizeof(type). Для того чтобы программа получила возможность использовать найденные байты по своему усмотрению, начальный адрес – результат работы функции malloc() – следует сохранить в некоторой переменной программы. Как объявить эту переменную, допустим, с именем ptr?
type * ptr; Переменная ptr очевидно должна быть указателем ,
т.к. в ней будет храниться адрес некоторого объекта.
Тип этого объекта (т.е. используемый ранее тип type)
следует добавить в объявление переменной ptr.
В соответствии с заголовком тип функции malloc() – void *, указатель на объект любого типа, поэтому для корректной работы программы рекомендуется вызывать функцию malloc() с приведением типа (type *). Таким образом, программа обязательно должна содержать следующие операторы:
Оператор создания типа type.
type * ptr;
Операторы объявления и определения переменной N .
ptr = (type *)malloc(N* sizeof(type)).
Учитывая, что в случае отсутствия свободной динамической памяти функция malloc() возвращает NULL, в программе следует предусмотреть действия, выполняемые в таком случае. Поэтому после вызова malloc() следует добавить в программу, например, следующие операторы:
if (!ptr) {printf(“\n Out of memory: ptr = NULL”); exit(1);}
Вместо выхода из программы exit(1); можно использовать любые другие операторы действия в таком случае. Обязательным является лишь требование не использовать далее переменную ptr.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.