Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОС_ответы.doc
Скачиваний:
35
Добавлен:
27.10.2018
Размер:
21.59 Mб
Скачать

Int n; scanf("%d",&n); //число элементов в массиве

тип *имя;

имя=new тип[n];//запрос памяти под элементы массива

...

delete[]имя; //освобождение памяти

Пример. Создать динамический массив для чисел типа long, размер задать с клавиатуры, в него записать целые степени двойки, вывести на экран и освободить память.

#include <stdio.h>

#include <stdlib.h>

Int main()

{ long *arr;

long mul=1L;

int n=10;

int i,j;

arr=new long[n];

if(arr==NULL) return -1;

for(i=0;i<n;i++)

{for(j=0;j<i+1;j++) mul*=2;

arr[i]=mul;

mul=1;

}

for(i=0;i<n;i++)

printf("arr[%d]=%ld\n",i,arr[i]);

delete [] arr;

return 0;

}

7 С++. Двовимірні масиви зміного розміру. Функції та оператори запитання (звільнення) пам'яті для двовимірного масиву даних

Для создания двумерного массива динамической памяти необходимо создать матрицу, состоящую из m строк и n столбцов. Для этого необходимо создать массив указателей на строки матрицы и указатель на этот массив. Синтаксис для создания двумерного массива динамической памяти с помощью функций malloc следующий:

Int n,m; scanf("%d%d",&n,&m); //число элементов строк и элементов в строке

тип **имя; // определение указателя на указатель

имя=(тип**)malloc(n*sizeof(тип*));//запрос памяти для указателей на строки

for(int i=0;i<n;i++)

имя[i]=(тип*)malloc(m*sizeof(тип));//запрос памяти для элементов в строке

..{/*работа с динамическим массивом*/}.

for(i=0;i<m;i++)

free(имя[i]); //освобождение памяти для элементов в строке

free(имя); //освобождение памяти для указателей на строки

В следующем примере при создании двумерного массива в начале создается массив из M указателей типа int*, а затем для каждого из них в цикле запрашивается адрес памяти, равной длине строки N. Проверка выделения памяти выполняется после каждого вызова функции malloc(), причем, если память для массива указателей выделилась, а для какой-то из строк нет, то память для массива указателей все равно необходимо высвободить. В конце программы показано как следует высвобождать память. В первую очередь с помощью цикла высвобождается память для каждой из строк массива, а затем память, выделенная для массива указателей на эти строки.

Пример

#include <stdio.h>

#include <stdlib.h>

Int main()

{int M,N,i,j;

int **ma;

puts("Введите число строк и столбцов матрицы");

scanf("%d%d",&M,&N);

ma=(int**)malloc(M*sizeof(int*));

if(ma==NULL)

{ printf("Ошибка выделения памяти!\n");

return -1; }

for(i=0;i<M;i++)

{ma[i]=(int*)malloc(N*sizeof(int));

if(ma[i]==NULL)

{printf("Ошибка выделения памяти!\n");

free(ma); return -1; }

}

puts("Введите элементы массива");

for(i=0;i<M;i++)

for(j=0;j<N;j++)

scanf("%d",&ma[i][j]);

for(i=0;i<M;i++)

for(j=0;j<N;j++)

*(*(ma+i)+j)=10*i+j;

for(i=0;i<M;i++)

for(j=0;j<N;j++)

printf("ma[%d][%d]=%d\n",i,j,ma[i][j]);

for(i=0;i<M;i++)

free(ma[i]);

free(ma);

return 0;

}

При использовании операции new и delete синтаксис для создания двумерного динамического массива такой: