Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Основные функции для работы с динамической памятью




Данные, которые создаются, инициализируются и уничтожаются по требованию программиста, называются динамическими. Для управления такими данными используются специальные стандартные функции, прототипы которых описаны в заголовочном файле <alloc.h>

Для запроса динамической памяти служит функция malloc(), которая имеет следующий прототип:

void* malloc(unsigned int size);

Функция malloc() выделяет область динамической памяти, размером size байт, и возвращает адрес этой области памяти.

В том случае, когда функция malloc() не может удовлетворить запрос на память, она возвращает значение NULL, то есть значение не существующего указателя.

*По материалам лекций А.Н. Прасолова
Поскольку функция malloc() возвращает значение на произвольный тип данных (обозначается как void*), то возвращаемое значение должно быть явно преобразовано к нужному типу данных.

После того как выполнена вся работа с выделенной областью памяти, ее следует освободить с помощью функции 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().

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных