Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Создание одномерного динамического массива

Динамическое выделение и освобождение памяти.

Работа с динамической памятью

 

В процессе работы программы автоматически выделяется место в памяти для всех ее объектов. Как будет показано ниже, иногда требуется явно указать момент выделения памяти для некоторых объектов и размер выделяемой под них памяти.

Динамическое (т.е. осуществляемое в процессе работы программы) выделение памяти означает:

1) поиск свободного (т.е. не занятого пока никаким объектом) участка памяти требуемого размера;

2) объявление его занятым (чтобы никакая последующая операция выделения памяти не назначила его другому объекту);

3) присваивание его адреса какому-либо указателю, через который в дальнейшем будет осуществляться работа с этим участком.

Динамическое выделение памяти называется также ее захватом.

Если в процессе работы динамически выделенная память оказывается больше не нужной, рекомендуется ее освободить, т.е. объявить доступной для других возможных операций выделения памяти. При завершении работы программы вся выделенная ей память освобождается автоматически.

 

Для работы с динамической памятью в С++ введены две операции:

захват памяти - new,

освобождение захваченной ранее памяти - delete.

 

В языке С размерность массива при объявлении должна задаваться константным выражением. При необходимости работы с массивами перемен­ной размерности нужно объявить вместо массива указатель требуемого типа, а затем в момент необходимости выделить память под массив нужного размера. Таким образом, размер массива в любом случае должен быть указан до начала работы с ним; но при динамическом выделении памяти он указывается не в тексте программы, а непосредственно при захвате памяти, и поэтому может определяться значением переменной.

 

Формат операции new для массивов:

указатель = new тип [количество];

Результат операции new, присваиваемый указателю – адрес начала области памяти для размещения данных указанного количества и типа. При нехватке памяти – результат NULL.

 

Формат операции delete:

delete указатель;

либо: delete [] указатель; (эти записи равносильны)

После выделения памяти с этим массивом можно работать, аналогично работе с обычным массивом, используя вышеописанную операцию косвенной адресации [].

Пример:

...

double *x;

int i, n;

...

puts(" Введите размер массива: ");

scanf(“%d”, &n);

x = new double [n];

if (x == NULL) {

puts(" Предел размерности! ");

return;

}

for (i=0; i<n; i++) // Ввод элементов массива

scanf(“%lf”, &x[i]); // Косвенная адресация

...

delete [ ]x; // Освобождение памяти

...

 

<== предыдущая лекция | следующая лекция ==>
Указатели на функции | Создание двуxмерного динамического массива
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 263; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.