Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ООП.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
712.7 Кб
Скачать

Лабораторная работа №1 Создание и использование динамических массивов

ЦЕЛЬ РАБОТЫ: изучение принципов работы с динамической памятью.

ОСНОВНЫЕ СВЕДЕНИЯ

Любой алгоритм имеет два основных критерия оценки эффективности ‑ трудоемкость и объем необходимой памяти. Считается, что чем меньше эти значения, тем эффективнее используются ресурсы компьютера. Современные компьютеры обладают достаточным объемом оперативной памяти необходимым для выполнения большинства обычных программ. Однако существуют такие программы, которые могут испытывать дефицит памяти. В таком случае, может быть применена динамическая память. Основное отличие динамической памяти от обычной (статической1) заключается в том, что существует возможность создания и удаления объектов из оперативной памяти в ходе выполнения программы. Например, если массив более не используется в программе, то его можно удалить из памяти, а освобожденное таким образом место можно использовать для повторного размещения новой структуры данных. Также динамическая память используется под размещение структур данных с заранее неизвестным размером. Организацией работы динамической памяти занимается операционная система. Программисту достаточно использовать две функции для работы с динамической памятью:

  • malloc() ‑ выделяет память в свободной области и возвращает указатель типа void (возвращает адрес первого байта выделенной области памяти). Если памяти не хватает, то возвращает нулевой указатель.

  • free( ) ‑ освобождает память.

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

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

Рассмотрим работу с динамическими переменными на следующем примере.

#include <stdlib.h>

//объявим указатель на динамическую переменную типа integer

int *p;

void main(){

//выделим память под размещение переменной

p=(int*)malloc(sizeof(int));

//теперь можно работать с переменной

*p=5;

printf(“%d”, *p);

Функция malloc выделяет участок памяти запрашиваемого размера и возвращает адрес динамической переменной. Для обращения по адресу используется символ “*”. Обращение по указателю без предварительного выделения памяти (вызов функции malloc) ЗАПРЕЩАЕТСЯ.

Работа с массивами происходит аналогичным образом. Обратите внимание, что при обращении к элементу массива символ “*” не ставится.

int *p;

void main(){

//выделим память под размещение 10 элементов типа int

p=(int*)malloc(10*sizeof(int));

//теперь можно работать с массивом

p[0]=5;

p[1]=2;

printf(“%d”, p[1]+p[0]);

Перед завершением работы программы все переменные из динамической памяти следует удалить вызовом функции free(<указатель на переменную>). Обращение к динамической переменной после ее удаления из памяти ЗАПРЕЩЕНО.

ЗАДАНИЕ

Задание 1. Создать динамический двумерный массив размером 200200 элементов, заполнить его случайными целыми числами (типа byte). Переписать элементы матрицы во вновь созданный одномерный динамический массив в следующем порядке

  1. По правым диагоналям, начиная с правого верхнего элемента.

  2. По левым диагоналям, начиная с левого верхнего элемента.

  3. По спирали, начиная с центрального элемента.

  4. По спирали, начиная с левого верхнего элемента.

Проверить объем доступной оперативной памяти до и после выполнения программы.

Задание 2. Создать двумерный динамический массив с произвольным количеством элементов в каждой сроке. Заполнить его и распечатать построчно. Проверить объем доступной оперативной памяти до и после выполнения программы.

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Каким образом происходит создание двумерного динамического массива.

  2. Как проверить была ли выделена память под переменную успешно.