Головна

Динамічне виділення пам'яті

  1. II. Від співака до поета. Виділення поняття поезії
  2. А н я т і е 12.3 ДОСЛІДЖЕННЯ ПАМ'ЯТІ ЗА ДОПОМОГОЮ МЕТОДИКИ заучування ДЕСЯТИ СЛІВ
  3. Б) Розлади здатності згадувати, здатності зберігати в пам'яті, здатності до запам'ятовування
  4. Величина, обернена ємності пам'яті
  5. Вид одиночного осцилятора і основне динамічне рівняння
  6. Види порушення пам'яті
  7. види пам'яті

У мові С ++ пам'ять можна виділяти динамічно. Динамічний розподіл пам'яті використовується, перш за все, тоді, коли заздалегідь невідомо, скільки об'єктів знадобиться в програмі, і чи знадобляться вони взагалі. За допомогою динамічного розподілу пам'яті можна гнучко управляти часом життя об'єктів, наприклад, виділити пам'ять не на самому початку програми (як для глобальних змінних), але, тим не менше, зберігати потрібні дані в цій пам'яті до кінця програми. Розподіляючи подібним чином пам'ять динамічно, ваша програма безперервно змінює свої потреби без додаткового програмування. Якщо ваша програма запитує пам'ять під час виконання, вона вказує необхідну кількість пам'яті, а використовуваний оператор мови C ++ повертає покажчик на цю пам'ять. У цьому параграфі розглядаються дії, які повинна виконати ваша програма для динамічного розподілу пам'яті, а згодом звільнення пам'яті під час виконання. Ви освоїте наступні основні концепції:

Динамічний розподіл пам'яті під час виконання є надзвичайно корисною можливістю.

ВИКОРИСТАННЯ ОПЕРАТОРА new

Пам'ять для величини будь-якого типу можна виділити, виконавши операцію new. Як операнда виступає назва типу, а результатом є адреса виділеної пам'яті.

long * lp;

lp = new long; // Виділити пам'ять під нове ціле число

float * cp;

// Створити новий об'єкт типу float

cp = new float;

Створений таким чином об'єкт існує до тих пір, поки пам'ять не буде явно звільнена за допомогою операції delete. Як операнда delete повинен бути заданий адреса, Повернутий операцією new:

delete lp;

delete cp;

Якщо необхідно динамічно створити масив, то потрібно використовувати трохи іншу форму new. Припустимо, що вашій програмі необхідний масив для зберігання 50 цілочисельних значень. використовуючи оператор new, ви можете замовити цю пам'ять, як показано нижче:

int * buffer = new int [50];

Кажучи коротко, якщо оператор new успішно виділяє пам'ять, він повертає покажчик на початок області цієї пам'яті. В даному випадку, оскільки програма розподіляє пам'ять для зберігання масиву цілих чисел, вона привласнює повертається покажчик змінної, визначеної як покажчик на тип int. якщо оператор new не може виділити запитуваний вами обсяг пам'яті, він поверне NULL-покажчик, який містить значення 0. Щораз, коли програма динамічно розподіляє пам'ять з використанням оператора new, вона повинна перевіряти повертається оператором new значення, щоб визначити, чи не так само воно NULL. Щоб визначити, виділив оператор new пам'ять, ваша програма повинна порівняти значення покажчика з NULL, як показано в прикладах нижче:

приклад 1.

Наступна програма використовує оператор new для отримання покажчика на 100-елементний цілочисельний масив:

#include "stdafx.h"

#include

void main ()

{
int * pointer = new int [100];
if (pointer! = NULL) cout « "Пам'ять успішно виділена";
else cout « "Помилка виділення пам'яті" « endl;
}

Як бачите, програма відразу перевіряє значення, присвоєне оператором new змінної-вказівником. Якщо покажчик містить значення NULL, значить new не зміг виділити запитуваний обсяг пам'яті. Якщо ж покажчик містить не NULL, отже, new успішно виділив пам'ять і покажчик містить адресу початку блоку пам'яті.




Float P; | Механізм заміни параметрів | Параметри-масиви у функціях | рекурсія | завдання 1 | завдання 3 | Введення-виведення символьних даних | Обробка символьних даних | Введення-виведення строкових даних | Пошук символу в стоці |

© 2016-2022  um.co.ua - учбові матеріали та реферати