Динамическое распределение памяти — страница 3

  • Просмотров 3577
  • Скачиваний 195
  • Размер файла 17
    Кб

получения этих адресов в отладчике достаточно нажать Alt+F4 (в режиме отладчика) затем в появившемся запросе ввести *x появится меню, вверху которого и будет нужный адрес, аналогично для *y, *z. */ return 0; } Задание №6 #include <stdio.h> #include <conio.h> #include <alloc.h> #include <process.h> #include <stdlib.h> //N_var - число элементов массива #define N_var 20 main() { clrscr(); //Инициализация генератора случ. чисел randomize(); int *mas; //Выделение памяти под массив if (!(mas=(int *)malloc(sizeof(int )*N_var)))

{ printf ("Не достаточно памяти для выделения массива\n"); exit (1); } //Заполнение массива случ. числами в диапазоне от -3 до 7 с одновременным //выводом на экран for (int i=0;i<N_var;i++) { mas[i]=random(11)-3; printf("N=%i %i\n",i,mas[i]); } //Освобождение памяти из под масси ва free (mas); return 0; } Задание №8 #include <stdio.h> #include <conio.h> #include <alloc.h> #include <process.h> //Структура Matr1, которая содержит размеры матрицы, а также одномерный //массив элементов матрицы и функцию для

задания размеров матрицы struct Matr1{ int m,n; int *ptr; void SetRazm(int mm,int nn) { m=mm; n=nn; } }; //Структура Matr1, которая содержит размеры матрицы, а также двумерный //массив элементов матрицы и функцию для задания размеров матрицы struct Matr2{ int m,n; int **ptr; void SetRazm(int mm,int nn) { m=mm; n=nn; } }; int DinMatr1 (Matr1 *matr); //функция выделения памяти для Matr1 int DinMatr2 (Matr2 *matr); //функция выделения памяти для Matr2 void FreeMatr1(Matr1 *matr); //функция освобождения памяти из под Matr1 void FreeMatr2(Matr2 *matr); //функция

освобождения памяти из под Matr2 main() { clrscr(); Matr1 M1; //Создание экземпляра Matr1 Matr2 M2; //Создание экземпляра Matr2 M1.SetRazm(2,2); //Задание размеров Matr1 M2.SetRazm(2,2); //--//-- Matr2 if (!DinMatr1(&M1)) //Выделение памяти для Matr1 { printf("Не хватает памяти под M1\n"); exit (1); } if (!DinMatr2(&M2)) //--//-- Matr2 { printf("Не хватает памяти под M2\n"); exit (1); } FreeMatr1 (&M1); //Освобождение памяти из под Matr1 FreeMatr2 (&M2); //--//-- Matr2 return 0; } int DinMatr1 (Matr1 *matr) { if (!((matr->ptr)=(int *)malloc(sizeof(int)*(matr->m)*(matr->n)))) return 0;

return 1; } int DinMatr2 (Matr2 *matr) { if (!(matr->ptr=(int **)malloc(sizeof(int *)*(matr->m)))) return 0; for (int i=0;i<matr->m;i++) { if (!(matr->ptr[i]=(int *)malloc(sizeof(int)*(matr->n)))) return 0; } return 1; } void FreeMatr1(Matr1 *matr) { if (matr->ptr) free (matr->ptr); } void FreeMatr2(Matr2 *matr) { for (int i=0;i<matr->m;i++) { if (matr->ptr[i]) free(matr->ptr[i]); } if (matr->ptr) free(matr->ptr); } Задание №10 #include <stdio.h> #include <conio.h> #include <alloc.h> #include <process.h> main() { clrscr(); char **mas; int c,m=0,n=0; mas=(char **)malloc(sizeof(char *)); //Выделение памяти под первое число mas[0]=(char *)malloc(sizeof(char)); //Выделение

памяти под первую позицию //цифры в числе printf ("Intput\n"); while ((c=getch())-'0') //Пока не ввели 0 { if (c==13) //При нажатии Enter выделение памяти { //под новое число mas[m][n]=0; m++; if (!(mas=(char **)realloc(mas,sizeof(char *)*(m+1)))) { printf ("Не хватает памяти\n"); exit(1); } n=0; putch(10); //Перевод карретки и перевод строки putch(13); //при выводе на экран } if ((c<'0')||(c>'9')) continue; //Проверка на ввод только цифр if ((!n)&&(m)) //Выделение памяти под первую позицию { //в следующем числе if(!(mas[m]=(char