【C++】动态内存管理 ① ( C 语言中的动态内存管理 | C 语言 内存申请 | C 语言 内存释放 | 代码示例 )
  K1I6GvxBEuyy 2023年11月02日 113 0



文章目录

  • 一、动态内存管理
  • 二、C 语言中的动态内存管理
  • 1、C 语言 内存申请
  • 2、C 语言 内存释放
  • 3、代码示例 - C 语言动态内存管理







一、动态内存管理



动态内存管理由

  • 内存的申请
  • 内存的释放

构成 , 这里的内存指的是 堆内存 , 与之相对的是 栈内存 ;



在 程序运行时 过程中 , 经常 根据需要 进行动态内存管理 , 从而更加灵活地管理内存资源 , 包括 :

  • 分配 堆内存 中的 内存空间
  • 释放 堆内存 中的 内存空间


C 语言 和 C++ 语言 中 , 都有 动态 分配 / 释放 堆内存 的方法 ;

  • C 语言中 , 主要是 堆内存的 分配 与 释放 ;
  • C++ 语言中 , 主要是 对象的动态建立和释放 ;





二、C 语言中的动态内存管理




1、C 语言 内存申请



在 C 语言中 , 使用malloc()、calloc()、realloc() 等标准库函数来动态地申请内存 :

  • malloc(size_t size) : 分配指定字节大小的堆内存 , 返回一个指向堆内存空间的指针 , 失败则返回 NULL ;
  • calloc(size_t num, size_t size): 分配指定 块数 和 字节大小的 堆内存 , 与 malloc 对比 calloc 自动将内存初始化为 0 ;
  • realloc(void* ptr, size_t size) : 修改已分配内存块的字节大小 ; 如果 指针参数 ptr 为 NULL , 则该函数与 malloc 函数功能相同 ; 如果 参数 size 为 0 , 则该函数 与 free 函数功能相同 , 用于释放 ptr 内存 ;


调用上述函数前 , 需要导入 stdlib.h 头文件 ;

#include <stdlib.h>



2、C 语言 内存释放



在 C 语言中 , 调用 free() 标准库函数 释放已申请的内存 ;



3、代码示例 - C 语言动态内存管理



在下面的代码中 ,

首先 , 使用 malloc() 函数 动态地申请了 可以存放 5 个 int 数据的 堆内存 ,

// 函数原型 : 
void *malloc(unsigned int size);

然后 , 将 malloc 函数返回的 void * 类型的指针转为 int * 类型的指针 ;

// 函数原型 : 
// void *malloc(unsigned int size);
// 申请内存
int* array = (int*)malloc(5 * sizeof(int));

再后 , 使用数组下标的方式访问内存 , 为内存赋值 ;

// 为内存赋值
    // 赋值时使用数组下标的方式访问内存
    for (int i = 0; i < 5; i++) {
        array[i] = i;
    }

再后 , 打印内存数据 , 获取内存空间值时使用指针形式访问内存 ;

// 打印内存
    // 获取内存空间值时使用指针形式访问内存
    for (int i = 0; i < 5; i++) {
        printf("%d ", *(array + i));
    }

最后 , 调用 free 函数释放这块内存 ;

// 释放内存  
    free(array);



代码示例 :

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

int main() {
    // 申请内存
    int* array = (int*)malloc(5 * sizeof(int));
    if (array == NULL) {
        printf("内存分配失败\n");
        return -1;
    }

    // 为内存赋值
    // 赋值时使用数组下标的方式访问内存
    for (int i = 0; i < 5; i++) {
        array[i] = i;
    }

    // 打印内存
    // 获取内存空间值时使用指针形式访问内存
    for (int i = 0; i < 5; i++) {
        printf("%d ", *(array + i));
    }
    printf("\n");

    // 释放内存  
    free(array);

    // 控制台暂停 , 按任意键继续向后执行
    system("pause");

    return 0;
}

执行结果 :

0 1 2 3 4
请按任意键继续. . .

【C++】动态内存管理 ① ( C 语言中的动态内存管理 | C 语言 内存申请 | C 语言 内存释放 | 代码示例 )_内存申请


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
K1I6GvxBEuyy
作者其他文章 更多