Часть полного текста документа:Динамическое распределение памяти Курсовая работа по дисциплине основы алгоритмизации и программирования студента Золин А.С. Министерство высшего и профессионального образования РФ Уральский государственный технический университет Радиотехнический факультет Кафедра "Автоматика и информационные технологии" Екатеринбург 2000 Введение Целью работы является демонстрация работы с динамической памятью на примере программ разработанных к заданиям 2, 6, 8, 10, 12, 14, 16 из методического указания [1]. Динамическое распределение памяти предоставляет программисту большие возможности при обращении к ресурсам памяти в процессе выполнения программы, и корректная работа программы с динамической памятью в существенной степени зависит от знания функций для работы с ней. Руководство пользователя Задание №2 Для того чтобы убедиться что для каждого из однобайтовых данных в куче выделено 16 байт т.е. 1 параграф нужно сравнить три адреса, которые появяться на экран в рез-те действия этой программы. Если числа в этих адресах стоящие до двоеточия увеличиваютя (от первого к последнему) на еденичку, то это означает что на каждый блок выделен один параграф в куче = 16 байт. Для получения этих адресов в отладчике достаточно нажать Alt+F4 (в режиме отладчика) затем в появившемся запросе ввести *x появится меню, вверху которого и будет нужный адрес, аналогично для *y, *z. Задание №6 Программа выделяет память под 20 переменных типа int, заполняет их случайными числами из интервала [-3;7] и выводит их на экран. Задание №8 Программа хранит матрицы в виде двух структур: Struct Matr1{int m, n; int *ptr}; Struct Matr2{int m, n; int **ptr}; И выделяет память под них с помощью следующих функций: Int DinMatr1(Matr1 *matr); Int DinMatr2(Matr2 *matr); Задание №10 Программа получает с клавиатуры натуральные числа, сохраняя их в куче, конец ввода - число 0. По окончании ввода числа выводятся на экран. Задание №12 Программа вычисляет октоэдрическую норму матрицы произвольных размеров. Задание №14 Программа вычисляет общий размер свободной кучи. Задание №16 Программа выполняет считывание матрицы произвольных размеров из файла (разделителями являются пробелы), вывод этой матрицы на экран, а также запись в файл. Руководство программиста В этом разделе будут приведены листинги программ с комментариями. Задание №2 #include #include #include int main(void) { char *x,*y,*z; //Объявление переменных x=(char *)malloc(sizeof(char)); //Выделение динамической памяти для *x y=(char *)malloc(sizeof(char)); // --//-- *y z=(char *)malloc(sizeof(char)); // --//-- *z clrscr(); // Очистка экрана printf("Adress of *x=%p\n",x); // Вывод на экран адреса начала блока для *x printf("Adress of *y=%p\n",y); // --//-- *y printf("Adress of *z=%p\n",z); // --//-- *z free (z); // Освобождение блока выделенного для *z free (y); // --//-- *y free (x); // --//-- *x /* Для того чтобы убедиться что для каждого из однобайтовых данных в куче выделено 16 байт т.е. ............ |