Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мищишин електронка.doc
Скачиваний:
0
Добавлен:
08.12.2018
Размер:
1.04 Mб
Скачать

Void main(void)

{

Int size;

char *pointer;

cout << "Введіть розмір масиву, до 30000: ";

cin >> size;

if (size <= 30000)

{

pointer = new char[size];

if (pointer ! = NULL)

cout << "Пам'ять виділена успішно" << endl;

else

cout << "Неможливо виділити пам'ять" << endl;

}

}

Коли ваші програми використовують оператор new для динамічного розподілу пам'яті, то цілком імовірно, що вони самі знають, скільки пам'яті необхідно виділити. Наприклад, якщо програма розподіляє пам'ять для зберігання інформації про службовців, вона, можливо, зберегла кількість службовців у файлі. Отже, при виконанні вона може прочитати кількість службовців з файлу, а потім виділити відповідну кількість пам'яті.

Наступна програма NOMEMORY.CPP виділяє кожного разу пам'ять для 10000 символів до тих пір, поки оператор new не зможе більше виділити пам'ять. Іншими словами, ця програма утримує виділену пам'ять. Якщо програма успішно виділяє пам'ять, вона сповіщає про це повідомленням. Якщо пам'ять більше не може бути виділена, програма виводить повідомлення про помилку і завершується:

Void main(void)

{

char *pointer;

do {

pointer = new char[10000];

if (pointer != NULL)

cout << "Виділено 10000 байт" << endl;

else

cout << "Більше немає пам'яті" << endl;

} while (pointer != NULL);

}

Зауваження: Якщо ви працюєте в середовищі MS-DOS, то, можливо, будете здивовані тим, що вільна пам'ять вичерпується після того, як програма виділить 64 Кбайт. Більшість працюючих в MS-DOS компіляторів C++ за замовчуванням використовують малу модель пам'яті, яка забезпечує тільки 64 Кбайтів вільної пам'яті. Аналогічно в середовищі MS-DOS найбільша ділянка пам'яті, до якої можуть звернутися ваші програми, обмежена 64 Кбайт.

Кожного разу при виконанні програми компілятор C++ виділяє окрему ділянку невикористовуваної пам'яті, яка називається вільною пам'яттю. Застосовуючи оператор new, програма може виділити пам'ять з цієї вільної ділянки під час виконання. Розмір вільної пам'яті може відрізнятися залежно від вашої операційної системи і моделі пам'яті компілятора.

Очищення пам'яті, якщо вона більше не потрібна

Оператор new дозволяє програмам динамічно виділяти пам'ять. Якщо виділена пам'ять більше не потрібна, то вона може бути видалена використовуючи оператор delete. Для цього необхідно спрямувати на дану ділянку пам'яті вказівник, як показано нижче[10]:

delete pointer;

Наступна програма DEL_MEM.CPP використовує оператор delete для очищення виділеної за допомогою оператора new пам'яті:

Void main(void)

{

char *pointer = new char[100];

strcpy(pointer, "Вчимося програмувати мовою C++");

cout << pointer << endl;

delete pointer;

}

За замовчуванням, якщо програма не звільняє виділену їй пам'ять до свого завершення, операційна система автоматично очищує цю пам'ять після завершення програми. Проте якщо ваша програма використовує оператор delete для очищення пам'яті, то пам'ять знову стає доступною для інших цілей (можливо, для вашої програми, яка знову використовуватиме оператор new, або для операційної системи).

Наступна програма ALLOCARR.CPP динамічно виділяє пам'ять для зберігання масиву з 1000 цілочисельних значень, а потім заносить в масив значення від 1 до 1000, виводячи їх на екран. Після цього програма звільняє динамічно виділену пам'ять і резервує її для масиву з 2000 значень з плаваючою крапкою, заносячи в масив значення від 1.0 до 2000.0 [1]:

_

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]