C语言动态内存的分配实例详解

yizhihongxing

C语言动态内存的分配实例详解

什么是动态内存分配

C语言中的内存分为两种:静态内存和动态内存。

静态内存是在程序编写的时候,由编译器在编译时分配的一块内存空间,也就是常说的栈和全局变量。静态内存在程序生命周期内都是存在的,由系统负责内存的分配和管理。

而动态内存分配,则是在程序执行过程中,需要临时分配一块内存空间,用于存储数据,这种分配方式就是动态内存分配。

动态内存的分配由程序员自行控制,不受静态内存大小的限制,能有效地提高程序的灵活性。

动态内存分配的方法

C语言中,动态内存分配主要通过 malloc()free() 函数实现。
* malloc() 函数用于分配一段指定大小的内存空间并返回该分配空间的地址。
* free() 函数用于释放之前分配的内存空间。

接下来我们通过示例学习如何使用 malloc()free() 进行动态内存分配和释放。

示例一:分配内存空间

分配一段 4 字节空间,用于存储一个 int 类型的变量。

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

int main() {
    // 分配 4 字节内存空间
    int *p = (int *) malloc(4);

    if(p == NULL) {
         printf("空间分配失败 \n");
         return -1;
    }
    // 依次存入 3,2,1 三个数
    *p = 3;    
    *(p+1) = 2;
    *(p+2) = 1;
    printf("%d,%d,%d",*p,*(p+1),*(p+2));
    // 释放内存
    free(p);
    return 0;
}

首先使用 malloc() 函数分配了一段 4 字节的内存空间,并将其地址赋值给指针变量 p。接着依次将 3,2,1 三个数存储到了该内存空间中。最后,使用 free() 释放了所分配的内存空间。

示例二:重新分配内存空间

对上面的示例进行一些修改,重新分配 8 字节空间,存储 4 个 int 类型的变量。

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

int main() {
    // 分配 4 字节内存空间
    int *p = (int *) malloc(4);

    if(p == NULL) {
         printf("空间分配失败 \n");
         return -1;
    }
    // 依次存入 3,2,1 三个数
    *p = 3;    
    *(p+1) = 2;
    *(p+2) = 1;
    printf("%d,%d,%d",*p,*(p+1),*(p+2));
    // 重新分配 8 字节内存空间
    p = (int *)realloc(p, 8);
    *(p+3) = 4;
    printf(",%d", *(p+3));
    // 释放内存
    free(p);
    return 0;
}

代码中使用 realloc() 函数重新分配内存空间,并传入两个参数:原内存块地址和需要重新分配的内存块大小。重新分配后,使用指针 p 保存新分配的内存块地址,接下来向其相应的地址存储变量值。值得注意的是,重新分配内存空间前需要先释放之前分配的内存空间,不然会造成内存泄露。

综上,在 C 语言中,动态内存分配给我们提供了一种更加灵活、高效的方式来存储临时使用的数据,但也需要我们注意合理分配和释放内存,避免造成内存泄露等问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言动态内存的分配实例详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C语言中递增和递减运算符的区别

    下面详细讲解C语言中递增和递减运算符的区别。 什么是递增和递减运算符 在C语言中,递增运算符++和递减运算符–分别可以将变量的值增加或者减少1。它们可以作用于整型、浮点型、字符型等基本数据类型的变量。 递增和递减运算符可以在变量前面或者后面使用,使用的方式决定了它们的执行顺序,也影响了最终计算出的结果。 前置和后置运算符的区别 递增和递减运算符可以前置(放…

    C 2023年5月10日
    00
  • C语言实现学生成绩管理系统项目

    C语言实现学生成绩管理系统项目攻略 1. 需求分析 在开发学生成绩管理系统前,我们需要对系统的功能需求进行分析。在此项目中,我们需要实现以下功能: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 展示所有学生信息 2. 数据结构设计 在此项目中,我们需要定义一个结构体来存储学生的信息,该结构体包含以下信息: struct Student { int …

    C 2023年5月23日
    00
  • go GCM gin中间件的加密解密文件流处理

    GCM是一种加密方式,它能够提供认证和加密的安全性,并且应用范围广泛。在Go语言中,我们可以通过gin框架中的中间件来实现GCM加密解密文件流处理。 下面我们就来一步步讲解如何实现。 引入必要的包 在Go语言中,实现GCM加密解密流处理,我们需要使用到以下包: import ( "crypto/aes" "crypto/ciph…

    C 2023年5月23日
    00
  • C 语言基础教程(我的C之旅开始了)[九]

    那么让我们来详细讲解“C 语言基础教程(我的C之旅开始了)[九]”吧。 标题 本文的标题是“C 语言基础教程(我的C之旅开始了)[九]”。 代码块 本篇文章中会使用到多个代码块,代码块应该使用“`进行标注,并标明代码块中的语言,如下所示: #include <stdio.h> int main() { printf("Hello, W…

    C 2023年5月23日
    00
  • 实例详解Android中JNI的使用方法

    实例详解Android中JNI的使用方法 在 Android 应用中,如果需要使用一些 C/C++ 的库或代码,就需要使用 JNI 技术来调用。本文将介绍在 Android 中如何使用 JNI。 1. 环境准备 首先,需要下载 JNI 开发环境,并配置好环境变量。可以在官网下载 NDK,解压缩后配置环境变量: export PATH=$PATH:/path/…

    C 2023年5月23日
    00
  • C语言实现扫雷游戏小项目

    C语言实现扫雷游戏小项目攻略 1. 项目需求 本项目是一个简单的命令行扫雷游戏,主要需求如下: 使用C语言编写; 实现基础的扫雷游戏逻辑、界面和操作; 实现自定义雷区难度选择功能; 实现输赢判断和计分功能。 2. 项目实现思路 2.1 界面设计 扫雷游戏的主界面应该包含以下元素: 雷区:即扫雷主要游戏区域,显示方格和地雷的分布情况; 游戏操作区:便于玩家控制…

    C 2023年5月23日
    00
  • windows系统下C++调用matlab程序的方法详解

    针对“windows系统下C++调用matlab程序的方法详解”的问题,我会给出一个完整的攻略: Windows系统下C++调用Matlab程序的方法详解 介绍 在开发过程中,有时需要使用到Matlab算法或函数,为了快速地实现使用Matlab,可以将算法或函数编写成Matlab可执行文件(.exe),并通过C++程序进行调用。在Windows系统下,我们可…

    C 2023年5月23日
    00
  • c语言中如何修改文件中间的几个字节

    要修改文件中间的某几个字节,可以采用以下步骤: 1.打开文件,获取文件句柄;2.使用fseek()函数将文件指针移动到需要修改的位置;3.使用fwrite()函数将新的字节写入文件;4.关闭文件。 下面是代码示例: #include <stdio.h> int main() { char filename[] = "test.txt&q…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部