ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Основные функции для работы с динамической памятьюДанные, которые создаются, инициализируются и уничтожаются по требованию программиста, называются динамическими. Для управления такими данными используются специальные стандартные функции, прототипы которых описаны в заголовочном файле <alloc.h> Для запроса динамической памяти служит функция malloc(), которая имеет следующий прототип: void* malloc(unsigned int size); Функция malloc() выделяет область динамической памяти, размером size байт, и возвращает адрес этой области памяти. В том случае, когда функция malloc() не может удовлетворить запрос на память, она возвращает значение NULL, то есть значение не существующего указателя.
После того как выполнена вся работа с выделенной областью памяти, ее следует освободить с помощью функции free(), имеющей следующий прототип: void free(void *block); где block - указатель на область памяти, значение которого ранее было возвращено какой-либо функцией выделения памяти. Если при вызове функции free() значение указателя block не соответствует адресу, возвращенному функцией выделения памяти, то результат выполнения функции free() непредсказуем, а область динамической памяти может быть вообще разрушена. Не допускается также освобождать уже освобожденный блок памяти.
Рассмотрим типичную последовательность действий при работе с динамической памятью:
double *A; int n; ... n = 200; ... A = (double *) malloc(n * sizeof(double)); ... /* Работа с массивом A */ ... free(A);
В рассмотренном фрагменте программы выделяется память для хранения n элементов типа double. Для совместимости никогда не следует явно задавать размер элемента данных. Нужно пользоваться операцией sizeof() – операция получения размера данных. Возвращаемое функцией malloc() значение в приведенном примере преобразуется к типу указателя на double (обозначается как double*).
Как видно из примера, функции работы с динамической памятью позволяют использовать массивы с границами, задаваемыми переменными, а не константами. В некоторых случаях бывает полезной функция calloc(), которая не только выделяет память, но и заполняет область выделенной памяти нулевыми значениями. Она имеет следующий прототип: void * calloc(unsigned int nitems, unsigned int size);
Функция выделяет непрерывный блок памяти для nitems элементов данных размером size байт каждый и заполняет этот блок нулевыми значениями. В остальном ее работа аналогична работе функции malloc().
Не нашли, что искали? Воспользуйтесь поиском:
|