Динамические массивы в C++.

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

Создание динамического массива

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int num; // размер массива
    cout << "Enter integer value: ";
    cin >> num; // получение от пользователя размера массива

    int *p_darr = new int[num]; // Выделение памяти для массива
    for (int i = 0; i < num; i++) {
        // Заполнение массива и вывод значений его элементов
        p_darr[i] = i;
        cout << "Value of " << i << " element is " << p_darr[i] << endl;
    }
    delete [] p_darr; // очистка памяти
    return 0;
}

Синтаксис выделения памяти для массива имеет вид: указатель = new тип[размер]. В качестве размера массива может выступать любое целое положительное значение.

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

// пример использования операции delete:
delete ptrvalue;
// где ptrvalue – указатель на выделенный участок памяти типа int                 
// delete – операция высвобождения памяти

Использование динамических массивов

Для доступа к динамически выделяемому массиву следует использовать функцию str(). Она имеет следующий прототип:

char *str();

Эта функция «замораживает» массив и возвращает указатель на него. Как только массив заморожен, он не может снова использоваться для вывода данных. Поэтому не следует замораживать массив, пока продолжается запись в него символов. Пример использования динамического массива:

#include <strstrea.h>
#include <iostream.h>
main ()
{
char *p;
ostrstream outs; // динамическое размещение массива
outs << "I like С++ ";
outs << -10 << hex << " ";
outs.setf (ios::showbase);
outs << 100 << ends;
p = outs.str (); /* заморозка динамического буфера и возврат указателя на него */
cout << р;
delete р; // освобождение динамического буфера, созданного ostrstream()
return 0;
}

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Один комментарий

  1. Уведомление: Векторы в С++. - it-black.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Chinese (Traditional)EnglishJapaneseRussianUkrainian

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: