C - 内存分配
- C语言--备忘
- 一、C 内存分配
- 1. 变量:
- 2. 数组:
- 3. Struct:
- 4. malloc 和 free:
- 1. malloc 函数
- 2. free 函数
- 3. 举例使用:
- 总结:
一、C 内存分配 1. 变量:
- 缺点:不能分配大量内存;[static, const, 动态,全局]
- 数组:数据类型相同,可做到大量内存分配。
- 局部数组:访问范围有限。
- 全局数组:存在乱序访问,需要添加互斥保护,降低运行效率。
- 可以数组成员来实现大量内存访问,同样存在数组缺陷;
- 做到分配大量内存,并且分配内存与数据类型无关。
- 功能:动态(随时随地)分配连续内存,必须使用free函数释放;
- 形参:size:指定要分配的内存大小,单位是字节 ;
- 返回值:返回分配的内存的首地址,注意做到强制类型转换;
如果分配失败,返回值NULL
#include//为了分配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 函数
- 功能:释放内存;注意释放指针:p=NULL
- 形参:传递 malloc 分配的内存的首地址 p
#includevoid free(void *p); //调用此函数,即可随时释放malloc分配的内存,将内存资源归还给操作系统
注意:不要让指针乱指
free (p); // p指向的内存释放了 p = NULL; // 将指针置0,否则p成为野指针了3. 举例使用:
#include总结: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; }
- 本节总结常见内存分配,C备忘结束。



