Динамические массивы в С++
Динамическое выделение памяти необходимо для эффективного использования памяти компьютера. Например, мы написали какую-то программку, которая обрабатывает массив. При написании данной программы необходимо было объявить массив, то есть задать ему фиксированный размер (к примеру, от 0 до 100 элементов). Тогда данная программа будет не универсальной, ведь может обрабатывать массив размером не более 100 элементов. А если нам понадобятся всего 20 элементов, но в памяти выделится место под 100 элементов, ведь объявление массива было статическим, а такое использование памяти крайне не эффективно. Динамические масссивы решают эту проблему.
Cоздают динамические массивы с помощью операции new, при этом необходимо указать тип и размерность.
Комментарий. Создана переменная-указатель на float, в динамической памяти отводится непрерывная область, достаточная для размещения 100 элементов вещественного типа, и адрес ее начала записывается в указатель р.
Важно. Динамические массивы нельзя при создании инициализировать, и они не обнуляются.
Преимущество. Размерность может быть переменной, то есть объем памяти, выделяемой под массив, определяется на этапе выполнения программы.
Доступ к элементам динамического массива так же, как к статическим:
Операция преобразования типа, записанная перед обращением к функции mal1ос, требуется потому, что функция возвращает значение указателя тина void*, а инициализируется указатель на float.
Важно. Память, зарезервированная под динамический массив с помощью new [], должна освобождаться оператором delete [], а память, выделенная функцией mallос — посредством функции free, например:
Cоздают динамические массивы с помощью операции new, при этом необходимо указать тип и размерность.
int n = 100: float *р = new float [n];
Важно. Динамические массивы нельзя при создании инициализировать, и они не обнуляются.
Преимущество. Размерность может быть переменной, то есть объем памяти, выделяемой под массив, определяется на этапе выполнения программы.
Доступ к элементам динамического массива так же, как к статическим:
р[5] или *(р+5)Еще способ создания динамического массива с помощью функции mallос библиотеки С (не рекомендуется):
int n = 100; float *q = (float *) malloc(n * sizeof(float));
Важно. Память, зарезервированная под динамический массив с помощью new [], должна освобождаться оператором delete [], а память, выделенная функцией mallос — посредством функции free, например:
delete [ ] р; free (q);Замечание. При несоответствии способов выделения и освобождения памяти результат не определен. Размерность массива в операции delete не указывается, но квадратные скобки обязательны.