IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C - malloc -> 正文阅读

[C++知识库]C - malloc

C语言–备忘



一、C 内存分配

1. 变量:

  1. 缺点:不能分配大量内存;[static, const, 动态,全局]

2. 数组:

  1. 数组:数据类型相同,可做到大量内存分配。
  2. 局部数组:访问范围有限。
  3. 全局数组:存在乱序访问,需要添加互斥保护,降低运行效率。

3. Struct:

  1. 可以数组成员来实现大量内存访问,同样存在数组缺陷;
  2. 做到分配大量内存,并且分配内存与数据类型无关。

4. malloc 和 free:

1. malloc 函数

  1. 功能:动态(随时随地)分配连续内存,必须使用free函数释放;
  2. 形参:size:指定要分配的内存大小,单位是字节
  3. 返回值:返回分配的内存的首地址,注意做到强制类型转换;
    如果分配失败,返回值NULL
#include <stdlib.h>  //为了分配malloc和free
void *malloc(unsigned long size)

分配举例:

void *p=malloc(8);
if(NULL==p){
    printf("分配内存失败");
    return -1;
}else{
    *(int *)(p+0)=2;
    *(int *)(p+4)=3;//将p强制转换为int指针类型,P为首地址,int* 代表内容占据 4 字节
    printf("%d %d",*(int *)(p+0),*(int *)(p+4));
}

2. free 函数

  1. 功能:释放内存;注意释放指针:p=NULL
  2. 形参:传递 malloc 分配的内存的首地址 p
#include <stdlib.h>
  void free(void *p);
//调用此函数,即可随时释放malloc分配的内存,将内存资源归还给操作系统

注意:不要让指针乱指

free (p);  // p指向的内存释放了
p = NULL;  // 将指针置0,否则p成为野指针了

3. 举例使用:

#include <stdio.h>
typedef struct student{
    char *name[30];
    int age;
    int weight;
}stu_t;

stu_t *get_stu_inform(void)
{
    //动态内存分配,只要不调用free,内存一直存在
 	stu_t *stu1=(stu_t *)malloc(sizeof(stu_t));
  	if(NULL==stu1){
       printf("分配失败");   
       return NULL;
   }
   memset(stu1,0,sizeof(stu_t));//清零
   //指定信息
   strcpy(stu1->name,"yujinlong");
   stu1->age=18;
   stu1->weight=180;
   return stu1;      	   
}

int main(int argc,char *argv[])
{
    //获取学生信息,p为malloc分配内存头指针
    stu_t *p=get_stu_inform();
  	if(NULL==p){
       printf("分配失败");   
       return -1;
   } 
    printf("%s %d %d",p->name,p->age,p->id);
    free();//malloc内存清空
    stu1=NULL;//清空指针
    return 0;
}

总结:

  1. 本节总结常见内存分配,C备忘结束。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:37:15  更:2022-07-04 22:39:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 2:26:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码