Динамическое выделение памяти

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

В языке Си для динамического выделения памяти под переменную и освобождения памяти из-под ненужной переменной служат соответственно функции malloc() и free().

В языке Си++ предусмотрены две операции – new и delete, которые мы и рассмотрим.

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

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

Иллюстрация работы с динамически выделенной памятью под массив:

# include <iostream.h>

# include <conio.h>

Void main(void)

{int *p, i, size;

clrscr();

cout<<”Введите размер массива: ”;

cin>>size;

p=new int[size]; //Выделяем память под массив целых чисел

if (!p) cout<<"Недостаточно памяти";

Else

{

for (i=0; i<k; i++)

{p[i]=i;

cout<<p[i];}

Delete(p); //Освобождаем память

}

getche();

}


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



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