Удаление динамического массива

При удалении динамических массивов используется специальная форма оператора delete для массивов, т.е. delete[]:

 

delete [] //указатель на динамический массив;

 

Таким образом, мы сообщаем процессору, что ему нужно очистить память от нескольких переменных вместо одной. Самая распространённая ошибка, которую совершают новички при работе с динамическим выделением памяти, является использование delete вместо delete[] для удаления динамических массивов. Использование формы оператора delete для переменных для удаления массива приведёт к неожиданным результатам: повреждение данных, утечка памяти, сбой или другие проблемы.

 

Пример.

// пример использования операции delete:

delete ptrvalue;

// где ptrvalue – указатель на выделенный участок памяти типа int                

// delete – операция высвобождения памяти

Пример.

#include <iostream>

 

int main()

{

int n = 5; // размер массива

int *p = new int[n]{ 1, 2, 3, 4, 5 }; // массив состоит из чисел 1, 2, 3, 4

for (int *q = p; q!= p + n; q++)

{

   std::cout << *q << "\t";

}

std::cout << std::endl;

delete [] p;

return 0;

}

 

Итак, в С++ операции new и delete предназначены для динамического распределения памяти компьютера. Операция new выделяет память из области свободной памяти, а операция delete высвобождает выделенную память. Выделяемая память после её использования должна высвобождаться, поэтому операции new и delete используются парами. Даже если не высвобождать память явно, то она освободится ресурсами операционной системы по завершению работы программы. Рекомендую все-таки не забывать про операцию delete.

Инициализация динамического массива

Если вы хотите инициализировать динамический массив значением 0, то всё довольно просто:

int *array = new int[length]();

До C++11 не было простого способа инициализировать динамический массив ненулевыми значениями (список инициализаторов работал только с фиксированными массивами). А это означает, что нужно перебрать каждый элемент массива и присвоить ему значение явным указанием:

 

array[0] = 9;

array[1] = 7;

array[2] = 5;

array[3] = 3;

array[4] = 1;

 

Получается довольно много действий.

Однако, начиная с C++11, появилась возможность инициализации динамических массивов через списки инициализаторов:

 

int fixedArray[5] = { 9, 7, 5, 3, 1 }; // инициализируем фиксированный массив

int *array = new int[5] { 9, 7, 5, 3, 1 }; // инициализируем динамический массив

 

 


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



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