Хелпикс

Главная

Контакты

Случайная статья





Освобождение памяти, занятой элементами динамического массива



Освобождение памяти, занятой элементами динамического массива

Память, зарезервированная под динамический массив с помощью new[], должна освобождаться оператором delete[], память, выделенная функцией malloc — посредством функции free. При несоответствии способов выделения и освобождения памяти результат не определен. Размерность массива в операции delete не указывается, но квадратные скобки обязательны.

Многомерные массивы

Описанные выше массивы называются одномерными, так как положение одного элемента в нём описывается одним индексом. В многомерных массивах положение одного элемента определяется значением нескольких индексов. Таким образом, можно ввести общую форму объявления массива, которая представлена следующим образом:

тип идентификаторМассива[размерность_1][…][размерность_N];

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

 

Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс.

Общее количество элементов такого массива определяется как произведение количества строк на количество столбцов. А количество памяти, которое требуется отвести под такой массив определяется как произведение количества элементов на их размер.

Так, например, если мы имеем массив, состоящий из 5-ти строк и 3-х столбцов, которые хранят значения типа short int, то:

· Количество элементов в массиве = 5*3 = 15;

· Количество памяти, отводимое под массив = 15*2 (байта) = 30 байт.

Инициализировать массив можно ровно тем же способом, которым инициализировался одномерный массив, т.е. путём перечисления значения элементов в фигурных скобках.

Пример 7. Объявление и инициализация двумерного массива inta[2][3] = {0, 1, 2, 3, 4, 5} /*общий список элементов в порядке расположения элементов в памяти*/ inta[][2] = {{0, 1}, {1, 0}, {1, 1}}; /*массив массивов, при этом каждый массив заключается в фигурные скобки*/

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

Для создания динамического многомерного массива необходимо указать в операции new все его размерности.

Пример 8. Создание многомерного динамического массива. int nstr = 5; int **m = (int **) new int [nstr][10];

Самая левая размерность может быть переменной.

Для осуществления доступа к определённому элементу многомерного массива используются все его индексы в том же формате, что и для одномерных массивов. Однако, здесь можно воспользоваться и более экзотическим способом организации доступа к элементу.

Пример 9. Доступ к элементам многомерного массива. int matr [6][8]; matr[1][5]=7; /*поскольку matr[i] является адресом начала i-й строки, справедлив следующий способ организации доступа к элементу*/ *(matr[1]+5)=7; //или *(*matr+1)+5)=7;


  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.