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

CBeginner
Практиковаться сейчас

Введение

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

Примечание: вам нужно самостоятельно создать файл ~/project/main.c, чтобы практиковаться в написании кода и изучать, как компилировать и запускать его с использованием gcc.

cd ~/project
## создать main.c
touch main.c
## скомпилировать main.c
gcc main.c -o main
## запустить main
./main

Подключить необходимые заголовочные файлы

В этом шаге мы будем подключать необходимые заголовочные файлы в нашу программу.

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

Определить функцию main()

В этом шаге мы определим функцию main(). В этой функции мы объявим переменные, необходимые для программы.

int main()
{
    int n, i, *ptr, sum = 0;

    printf("\nEnter number of elements: ");
    scanf("%d", &n);

Динамически выделить память с использованием malloc()

В этом шаге мы динамически выделим память с использованием malloc(). Размер выделяемой памяти определяется произведением количества элементов на размер каждого элемента с использованием оператора sizeof().

ptr = (int *) malloc(n * sizeof(int));

if(ptr == NULL)
{
    printf("\nError! Memory not allocated.");
    exit(0);
}

Сохранять значения в выделенной памяти

В этом шаге мы будем сохранять значения в выделенную память с использованием цикла.

for(i = 0; i < n; i++)
{
    printf("\nEnter element %d: ", i + 1);
    scanf("%d", ptr + i);
    sum += *(ptr + i);
}

Вывести значения

В этом шаге мы выведем на печать сохраненные значения.

printf("\nElements entered are: ");
for(i = 0; i < n; i++)
{
    printf("%d ", *(ptr + i));
}

Освободить память

В этом шаге мы освободим выделенную память с использованием free().

free(ptr);

Резюме

В этом практическом занятии мы узнали, как динамически выделять память с использованием malloc() и освобождать память с использованием free(). Мы узнали, как объявлять переменные в функции main() и выделять память с использованием malloc(). Мы также узнали, как хранить данные в выделенной памяти, выводить на печать сохраненные значения и затем освобождать выделенную память с использованием free().