У вас вопросы?
У нас ответы:) SamZan.net

Цель работы- Ввести понятие динамического распределения памяти в стиле C

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.4.2025

Практическая работа №9. Динамическое распределение памяти (операторы new, delete).

1. Цель работы:

Ввести понятие динамического распределения памяти в стиле C++.

2. Темы для предварительной проработки

  •  Массивы
  •  Структуры

3. Теоретический материал

Статический и динамический. Терминология - статический/динамический характеризует изменение свойств объекта во время работы программы. Если эти свойства не меняются (жестко задаются при трансляции), то они статические, если меняются -динамические. То же касается и существования самих объектов.

Статический - объект, создаваемый при трансляции, динамический - при выполнении программы. По отношению к переменным это выглядит так: если переменная создается при трансляции (а с созданием переменной прежде всего связано распределение памяти под нее), то ее можно назвать статической, если же создается во время работы программы, - то динамической. С этой точки зрения все обычные (именованные) переменные являются статическими.

Основной недостаток обычных переменных - это их фиксированная размерность, которая определяется при трансляции (операция sizeof возвращает для них константу). Количество переменных в программе также ограничено (за исключением случая рекурсивного вызова функции). Но при написании многих программ заранее неизвестна размерность обрабатываемых данных. При использовании обычных переменных в таких случаях возможен единственный выход - определять размерность «по максимуму». В ситуации, когда требуется обработать данные еще большей размерности, необходимо внести изменения в текст программы и перетранслировать ее. Для таких целей используется команда препроцессора #define с тем, чтобы не менять значение одной и той же константы в нескольких местах программы.

#define SZ     1000

int A[SZ];

Динамические переменные. На уровне библиотек в Си имеется механизм создания и уничтожения переменных работающей программой. Такие переменные называются динамическими, а область памяти, в которой они создаются - динамической памятью, или «кучей» (см. рис). «Куча» представляет собой дополнительную область памяти по отношению к той, которую занимает программа в момент загрузки - сегменты команд, глобальных (статических) данных и локальных переменных (стека).

Операторы управления динамической памятью. Операторы new и delete используют при работе обозначения абстрактных типов данных для создаваемых переменных:

при создании динамической переменной в операторе new указывается ее тип, сам оператор имеет тип результата - указатель на создаваемый тип, а значение - адрес созданной переменной или массива;

если выделяется память под массив динамических переменных, то в операторе new добавляются квадратные скобки;

оператор delete получает указатель на уничтожаемую переменную или массив.

Основные свойства динамических переменных:

динамические переменные создаются и уничтожаются работающей программой путем выполнения специальных операторов или вызовов функций;

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

динамическая переменная не имеет имени, доступ к ней возможен только через указатель;

при выполнении функции создания динамической переменной в «куче» выделяется свободная память необходимого размера и возвращается указатель на нее (адрес);

функция уничтожения динамической переменной получает указатель на уничтожаемую переменную.

Самые важные свойства динамических переменных - это их «безымянность» и доступность по указателю, чем и определяется возможность варьировать число таких переменных в программе. Из этого можно сделать следующие выводы:

если динамическая переменная создана, а указатель на нее «потерян» программой, то такая переменная представляет собой «вещь в себе» - существует, но недоступна для использования;

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

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

//gl3стиль С++

#include <iostream.h>

#include <conio.h>

int main (void) {clrscr(); int i;

double   *pd;

pd = new double; // Обычная динамическая переменная

*pd = 5;

cout<<"\n"<<*pd<<"\n";  delete pd;  /*}*/

double *pdm; // Массив динамических переменных

pdm = new double[10];

for (i=0; i<10; i++)

{pdm[i]=i; cout<<"\n"<<pdm[i];}

delete []pdm;

getch(); return 0;}

4. Задание

Изменить программу – размер динамического массива определяется пользователем во время работы программы.

Провести эксперимент – по аналогии с программой из практической работы №8 выделить объем памяти под десять целочисленных переменных, не являющихся массивом (int*10).

Провести эксперимент – по аналогии с программой из практической работы №8 проанализировать результат выделения памяти (равенство указателя нулю).

PAGE  1




1. Очаг ядерного поражения
2. основная база накопления детьми позитивного социального опыта
3. Тема 23. Философия древнего мира Таблица 1
4. Объективные и субъективные признаки усталости утомления и переутомления 2
5. Проблемы информационного обеспечения международных экономических отношений
6. темами организациями
7. Дипломная работа- Технология очистки пробок эксплуатационной колонны
8. Реферат- История русской эмиграции в Чехословакии в 20-30-ее годы 20 века
9. ТЕМА 1 1 ФИНАНСЫ И ФИНАНСОВЫЙ МЕХАНИЗМ
10. природном подходе человек по своему поведению не отличается от животных