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

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

НАВИГАЦИЯ ПО СТРАНИЦЕ

Динамическое выделение памяти malloc calloc realloc Освобождение памяти

Динамическое выделение памяти — это процесс выделения блока памяти во время выполнения программы, в отличие от статического выделения памяти, которое выполняется при компиляции.

В языке программирования C для динамического выделения памяти используется функция malloc (или calloc для выделения нулевых байт) и функция realloc для изменения размера ранее выделенного блока. После использования выделенной памяти её следует освободить с помощью функции free. Вот как это работает:

Выделение памяти с помощью malloc:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *dynamicArray; // Объявление указателя на целое число

    // Выделение памяти для массива из 10 целых чисел
    dynamicArray = (int *)malloc(sizeof(int) * 10);

    if (dynamicArray == NULL) {
        printf("Ошибка выделения памяти.\n");
        return 1; // Выход из программы с ошибкой
    }

    // Использование выделенной памяти
    for (int i = 0; i < 10; i++) {
        dynamicArray[i] = i * 2;
    }

    // Освобождение памяти после использования
    free(dynamicArray);

    return 0;
}

Выделение нулевой памяти с помощью calloc:

int *dynamicArray;
dynamicArray = (int *)calloc(10, sizeof(int)); // Выделение нулевой памяти для массива из 10 целых чисел

Функция calloc инициализирует выделенную память нулевыми байтами.

Изменение размера выделенного блока с помощью realloc:

int *newDynamicArray = (int *)realloc(dynamicArray, sizeof(int) * 20);

Функция realloc позволяет изменить размер ранее выделенного блока памяти. Она возвращает новый указатель на блок памяти, который может быть изменен по размеру.

Освобождение памяти с помощью free:

free(dynamicArray); // Освобождение ранее выделенной памяти

Важно отметить, что после использования динамически выделенной памяти её необходимо освободить с помощью free, чтобы избежать утечек памяти. Неосвобожденная память может привести к нежелательным последствиям, таким как переполнение памяти и сбои в работе программы.