malloc的用法
malloc用法说明
为什么要强制转换
答:因为malloc函数的返回值是void类型指针(void类型地址),即返回分配内存的起始地址,该地址上存储的数据是未定义类型的。
强制转换之后,一个是地址,就是在内存中这个变量从哪里开始存放
另一个是长度,得到完整的数据类型。该数据类型有两个属性,一个是地址,就是在内存中这个变量从哪里开始存放;另一个是长度,从这个地址开始,后面还有几个字节是属于当前这个变量。
要判断malloc有没有成功开辟内存空间
当malloc函数成功开辟内存后,会返回对应的指针。要是内存空间不够大,内存开启失败,会返回NULL.
int *p = (int*)malloc(sizeof(int));
if(p == NULL){
perror("malloc failed");
exit(1);
}
要对数据进行初始化
malloc函数只是负责开辟内存空间。并没有对数据进行初始化。我们可以使用memset函数进行初始化.
内存空间使用完成后,要释放空间
堆区开辟的内存空间,编译器是不会自动回收。需要开发者自己回收。可以使用free()。
注意:使用free函数释放结构体的时候,并没有释放结构体内的指针。结构体内的指针要单独free。
struct person{
int age;
char *name;
};
int main(){
struct person *p = (struct person*)malloc(sizeof(struct person));
if(p == NULL){
perror("malloc");
exit(1);
}
memset(p,0,sizeof(struct person));
p->age = 18;
p->name = malloc(sizeof(char) * 20);
char *name = "jerry";
strcpy(p->name,name);
printf("p->name:\t%s\n",p->name);
free(p->name);// 这里要单独将指针free掉
free(p);
}
参考资料:https://blog.csdn.net/weixin_49146002/article/details/128314606
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理