ВУЗ:
Составители:
Рубрика:
17
операция наиболее распространена по сравнению с первым вариантом и
является предпочтительной.
Каждый раз при инициализации указателя использовался адрес той или
иной переменной. Это было связано с тем, что компилятор языка С
автоматически выделяет память для хранения переменных и с помощью
указателя можно без последствий работать с этой выделенной областью.
Вместе
с тем существуют функции malloc() и free(), позволяющие выделять и
освобождать память по мере необходимости. Данные функции находятся в
библиотеке <stdlib.h> и имеют следующий синтаксис:
void* malloc(size_t); //функция выделения памяти
void free(void* memblock); //функция освобождения памяти
Здесь size_t – размер выделяемой области памяти в байтах; void* -
обобщенный тип указателя, т.е. не привязанный к какому-либо конкретному
типу. Рассмотрим работу данных функций на примере выделения памяти для 10
элементов типа double.
Листинг 6. Программирование динамического массива.
#include <stdio.h>
#include <stdlib.h>
int main()
{
double* ptd;
ptd = (double *)malloc(10 * sizeof(double));
if(ptd != NULL)
{
for(int i = 0;i < 10;i++)
ptd[i] = i;
} else printf(“Не удалось выделить память.”);
free(ptd);
return 0;
}
При вызове функции malloc() выполняется расчет необходимой области
памяти для хранения 10 элементов типа double. Для этого используется
функция sizeof(), которая возвращает число байт, необходимых для хранения
одного элемента типа double. Затем ее значение умножается на 10 и в
результате получается объем для 10 элементов типа double. В случаях, когда по
каким-либо причинам не удается выделить указанный
объем памяти, функция
malloc() возвращает значение NULL. Данная константа определена в
нескольких библиотеках, в том числе в <stdio.h> и <stdlib.h>. Если функция
malloc() возвратила указатель на выделенную область памяти, т.е. не равный
NULL, то выполняется цикл, где записываются значения для каждого элемента.
При выходе из программы вызывается функция free(), которая освобождает
ранее выделенную память. Формально,
программа написанная на языке С при
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »