C 语言中的动态内存分配

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在 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/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) 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() 释放分配的内存。