delete A; // освобождаем массив указателей

}

В рассмотренном выше случае на каждую строку выделяется свой участок памяти. Можно поступить иначе: сначала выделим область памяти сразу на всю матрицы и запишем ее адрес в A[0]. Затем расставим указатели так, чтобы A[1] указывал на N+1 - ый элемент с начала блока(начало строки 1), A[2] – на 2N+1 - ый (начало строки 2) и т.д. Таким образом, в памяти выделяется всего два блока – массив указателей и сама матрица.

typedef int *pInt;

Main()

{

int M, N, i;

pInt *A; // указатель на указатель

// ввод M и N

A = new pInt[M]; // память на массив указателей

A[0] = new int [M*N]; // память для матрицы

for (i = 1; i < M; i ++) // расставляем указатели

A[i] = A[i-1] + N;

// работаем с матрицей

delete A[0]; // освобождаем матрицу

Delete A; // освобождаем указатели

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: