Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример 4. Следующая программа использует оператор new для распределения памяти под массив из 500 значений с плавающей точкой:




ОСВОБОЖДЕНИЕ ПАМЯТИ

Пример 3.

Пример 2.

Следующая программа использует оператор new для распределения памяти под массив из 500 значений с плавающей точкой:

float *array = new float[100];

if (array!= NULL) cout << "Память выделена успешно";
else cout << "new не может выделить память" << endl;

Поскольку эта программа "жестко закодирована" на объем требуемой памяти, возможно, вам потребуется ее редактировать и перекомпилировать, если возникнет необходимость, чтобы программа выделила меньше или больше памяти. Как уже обсуждалось, одна из причин существования динамического распределения памяти состоит в том, чтобы избавиться от необходимости редактировать и перекомпилировать программу при изменении требований к объему памяти. Когда ваша программа использует оператор new для динамического распределения памяти, то вполне вероятно, что она сама посчитала количество будущих элементов и запросит выделить соответствующее количество памяти или запросит это значение у пользователя.

Следующая программа запрашивает у пользователя количество памяти, которое необходимо выделить для хранения массива символов, и затем распределяет память, используя оператор new:

#include "stdafx.h"

#include <iostream>

using namespace std;

void main()

{
int size;

char *pointer;
cout << "Введите размер массива, до 30000: ";
cin >> size;
if (size <= 30000)

{
char *pointer = new char[size];
if (pointer!= NULL) cout << "Память выделена успешно";
else cout << "Невозможно выделить память" << endl;
}
}

Оператор C++ new позволяет вашей программе выделять память динамически во время выполнения. Если вашей программе больше не нужна выделенная память, она должна ее освободить, используя оператор delete. Для освобождения памяти с использованием оператора delete вы просто указываете этому оператору указатель на данную область памяти, как показано ниже:

delete pointer;

Следующая программа использует оператор delete для освобождения выделенной с помощью оператора new памяти:

#include "stdafx.h"

#include <string.h>

#include <iostream>

using namespace std;

void main()

{
char *pointer = new char[100];
strcpy(pointer, "Учимся программировать на языке C++");
cout << pointer << endl;
delete pointer;
}

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




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 377; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.