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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 6.5.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. Работа в текстовом редакторе Word
2. тематике во второй младшей группе Выполнил
3. Сочинение- Эрнест Хемингуэй
4. Метод проектов как средство развития коммуникативной компетенции учащихся по английскому языку Яхина Ай.html
5. Реальный валютный курс
6. равномерном механическом раздражении участков тела производимом руками или специальными приспособлениями
7. зеленого превратится в переполненный автомобилями и выхлопными газами
8. Теория государства и права
9. Шпаргалка- Комплексные системы КНАУФ.html
10. Экологическая обстановка месторождения Дунга