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

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В программировании на 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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/PointersandMemoryGroup -.-> c/pointers("Pointers") c/PointersandMemoryGroup -.-> c/memory_address("Memory Address") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-123283{{"Динамическое выделение памяти в C-программировании"}} c/for_loop -.-> lab-123283{{"Динамическое выделение памяти в C-программировании"}} c/pointers -.-> lab-123283{{"Динамическое выделение памяти в C-программировании"}} c/memory_address -.-> lab-123283{{"Динамическое выделение памяти в C-программировании"}} c/function_declaration -.-> lab-123283{{"Динамическое выделение памяти в C-программировании"}} c/user_input -.-> lab-123283{{"Динамическое выделение памяти в C-программировании"}} c/output -.-> lab-123283{{"Динамическое выделение памяти в C-программировании"}} end

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

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

#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().