C的内存管理(malloc、free)入门的注意事项

本文介绍了C语言中malloc和free的基本用法,强调了在使用过程中需要注意的事项,如检查malloc的返回值,防止内存耗尽;free后将指针设为NULL避免野指针;以及内存泄漏的概念和避免方法。通过实例展示了动态内存分配和释放的正确顺序,提醒程序员在编写长寿命程序时尤其要注意内存管理的重要性。
摘要由CSDN通过智能技术生成

malloc和free的一个简单例子

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int number;
char *msg;
} unit_t;
int main(void)
{
unit_t *p = malloc(sizeof(unit_t));
if (p == NULL) {
printf("out of memory\n");
exit(1);
}
p->number = 3;
p->msg = malloc(20);
strcpy(p->msg, "Hello world!");
printf("number: %d\nmsg: %s\n", p->number, p-
>msg);
free(p->msg);
free(p);
p = NULL;
return 0;
}

关于这个程序要注意以下几点:
        unit_t *p = malloc(sizeof(unit_t)); 这一句,等号右边是 void * 类型,等号左边
是 unit_t * 类型,编译器会做隐式类型转换,我们讲过 void * 类型和任何指针类型之间可
以相互隐式转换。
        虽然内存耗尽是很不常见的错误,但写程序要规范, malloc 之后应该判断是否成功。以后
要学习的大部分系统函数都有成功的返回值和失败的返回值,每次调用系统函数都应该判
断是否成功。
        free(p); 之后, p 所指的内存空间是归还了,但是 p 的值并没有变,因为从 free 的函数接口
来看根本就没法改变 p 的值,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值