Програмування в c builder

Динамічне виділення пам'яті за допомогою бібліотечної функції malloc складається з наступних кроків.

1. Включення в програму файлу заголовків malloc. h директивою # include .

p = (int *) malloc (число елементів масиву * sizeof (int));

Замість int може бути підставлений будь-який стандартний або введений програмістом тип.

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

if (! p) повідомлення, вихід; else продовження;

5. Звільнення пам'яті після закінчення роботи з нею. Для цього викликаємо функцію f гея і використовуємо покажчик як аргумент:

Найбільш частою причиною «зависання» комп'ютера при роботі з динамічно виділеної пам'яттю є невідповідність інструкцій malloc і free (в обох інструкціях повинен використовуватися один і той же покажчик) або недостатній обсяг вільної пам'яті.

Як приклад розглянемо введення / виведення одновимірного динамічного масиву довільної довжини, що задається з клавіатури.

cout <> N; // ввід розміру масиву

massiv = (int *) malloc (n * sizeof (int)); // виділення дінам.памяті

if (! massiv) // перевірка факту виділення пам'яті

cout <

for (i = 0; i> Massiv [i]; // введення масиву

for (i = 0; i

free (massiv); // звільнення пам'яті

У цій програмі покажчик використовується тільки для виділення динамічної пам'яті. Далі в програмі звернення до елементів масиву здійснюється через ім'я масиву, яке збігається з ім'ям покажчика.

Для динамічного виділення пам'яті можна також використовувати функцію calloc (). На відміну від malloc функція calloc крім виділення області пам'яті під масив об'єктів ще виконує ініціалізацію елементів масиву нульовими значеннями.

Залежно від використовуваної версії C ++ для роботи з великими фрагментами динамічної пам'яті можливе застосування функцій farmalloc (), farcalloc (), farcoreleft () і farfree ().

Схожі статті