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

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

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

2019-12-26 222
Динамическое выделение и освобождение памяти. 0.00 из 5.00 0 оценок
Заказать работу

При компиляции программы память компьютера разбивается на четыре области, содержащие код программы, глобальные данные, стек и динамически распределяемую память (иногда ее называют heap - куча). Heap – это свободная память, с которой можно работать с помощью функций new и delete. Для new аргументом является выражение, определяющее размер выделяемого массива, а возвращаемое значение – это указатель на начало массива:

int *array=new int[10];

Если память не может быть выделена, то оператор new возвращает указатель NULL. После каждой операции выделения памяти обязательна проверка указателя на NULL:

if(array==NULL)

printf(“memory allocation error.”);

else

{

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

}

Выделенная динамически память автоматически не освобождается при выходе из блока или по завершению программы. Для ее освобождения обязательно необходимо выполнить команду delete[] имя_массива; (delete[] array; - для предыдущего случая).

 

Практическое задание.

Вариант1.

Вычислите скалярное произведение векторов  и  размерности n.

Размерность векторов и их координаты должны вводится с консоли.

Контрольные примеры:

                          

                          

                       

Вариант 2.

Вычислите произведение матрицы на вектор.

Размерности вектора  и матрицы A, координаты вектора и элементы матрицы должны вводится с консоли. Координаты вектора  распечатайте на экране.

Контрольные примеры:

                                      

          

                                   

Вариант 3.

Вычислите сумму матриц. . Размерности матриц и их элементы введите с консоли. Элементы матрицы C выведите на экран.

Контрольные примеры:

                                  

                   

                                      

Вариант 4.

Напишите процедуры умножения и сопряжения матриц и с их помощью вычислите

Размерности матриц и их элементы вводятся с консоли. Элементы матрицы C должны выводится на экран.

Контрольные примеры:

                      

                   

 

Тема 5. Ввод и вывод в языке С++.

В языке С имеется весьма развитая библиотека функций ввода-вывода. Однако в самом языке отсутствуют какие-либо предопределенные файловые структуры. Все данные обрабатываются как последовательность байт. Имеется три основных типа функций: потоковые, работающие с консолью и портами ввода-вывода и низкоуровневые.

Потоковые функции.

В потоковых функциях файлы данных рассматриваются как поток отдельных символов.

Когда программа открывает файл для ввода вывода при помощи потоковых функций, то открытый файл связывается с некоторой переменной типа FILE (определенной в stdio.h), содержащей базовую информацию об этом файле. После открытия потока с помощью функции fopen возвращается указатель на эту переменную. Этот указатель используется для ссылки к файлу при всех последующих операциях ввода-вывода и называется указателем потока.

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

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

Для использования потоковых функций в программу должен быть включен заголовочный файл stdio.h. В нем содержатся описания прототипов функций ввода/вывода, а также - описания ряда констант. Константа EOF определяется как значение, возвращаемое при обнаружении конца файла, BUFSIZE - размер буферов потока, тип FILE определяет структуру, используемую для получения информации о потоке.

Поток открывается с помощью функций fopen(), fdopen() или freopen(). В момент открытия задаются режим файла и способ доступа. Эти функции возвращают указатель на переменную типа FILE, например

FILE *file1;

file1=fopen(“input.dat”,”r”);

открывает файл input.dat для чтения. Переменная file1 получает указатель на поток.

Возможные типы доступа:

“a” – запись в режиме добавления в конец файла,

”a+” –тоже, что и “a”, но возможно и чтение,

”r” – только для чтения,

”r+” – для чтения и записи,

”w” – открывается пустой файл для записи,

”w+” – открывается пустой файл для записи и чтения.

Когда начинается выполнение приложения, автоматически открывается следующие потоки: стандартное устройство ввода stdin, стандартное устройство вывода stdout, устройство сообщений об ошибках stderr, устройство печати stdprn и стандартное дополнительное устройство stdaux. Эти файловые указатели можно использовать во всех функциях ввода/вывода в качестве указателя на поток. Некоторые функции автоматически используют указатели на поток, например getchar() и putchar() используют stdin и stdout соответственно.

Для закрытия потоков используются функции fclose() и fcloseall(). Если программа не закрывает поток явно, то он закрывается автоматически по ее завершению.

Для перемещения по файлу можно использовать функции fseek(), ftell() и rewind().


Поделиться с друзьями:

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.