思考
什么情况下需要动态分配内存?
1、存储的数据需要延长生命周期
2、一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据(手动分配内存空间)
主要的技术:
malloc free realloc 的使用
- 1、malloc和free的使用
不使用malloc的例子
#include <stdio.h>
int main(){
char name[100] = {};
scanf("%s", name);
printf("%s\n",name);
return 0;
}
若想利用指针类接收数据,由于指针变量本身只能存地址,不能存数据,需要分配内存空间来存储数据。
方法如下:利用malloc申请内存空间,分配一片指针指向的内存,使用malloc要导入头文件#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
char *name ;//未指向内存,不能存储数据
name = (char *)malloc(10*sizeof(char));//10个字节的内存,内存空间强制为char*类型
if(name == NULL){
// 申请内存失败
exit(EXIT_FAILURE); //程序退出
}
scanf("%s", name);
printf("%s\n",name);
//使用完毕必须自己手动释放内存
free(name); //free malloc 配套使用
return 0;
}
两者的对比,前者利用数组,系统自动分配了内存空间,但内存从一开始规定了,不能更改,浪费的内存空间较大;而后者利用malloc方法,自己分配的内存,浪费的内存较小。
-
2、realloc的使用
作用:使用realloc动态改变已经分配的内存的大小(增加或减少之前分配的内存大小)
改变后内存空间:20个字节
name = (char *)realloc(name, 20*sizeof(char));
if(name == NULL){
//退出之前必须将之前分配的内存释放掉
free(name);
exit(EXIT_FAILURE);
}