【C语言探索之二】内存陷阱

前段时间看了一本书,是pdf的

《高质量C&C++编程指南》

作者应用多年经验对编程代码的优化和很多错误进行了讲解,一开始作者就拿出一套题目让我们进行自测,

以看出自己在编程方面的缺陷,至此有三个指针内存陷阱的题目,自己觉得蛮经典的,拿来一起看看


1.函数参数是指针的时候


代码的意思是我想改变的是str指针的值,
开始str=NULL
函数get_mm(str)这里只传递了str的值,并没有改变str的值,所以当执行下一句strcpy(str,“hello”)时str的值依然是NULL
且p所申请的内存泄露了,这种方式很危险,必须注意!!!

按照上面的思路改正确后


但是上面的的程序依然存在一个问题,内存泄露,没有free(str),这里用户申请的内存区域
需要用户来释放,以防止内存泄露,malloc()函数与free()函数需成套使用

2.返回值为指针


//函数返回的是一个野指针,因为内存已被释放

文字常量区,栈区 的变量在函数运行完就释放
而堆区的变量,用户申请的有用户释放或者整个程序运行完之后释放

程序中p指针值被返回,但是指向的内存区域被释放,即该区域不合法的内存,所以ptr是野指针,存在内存陷阱

3.段错误


free(str)后,str值不变,但是所指向的内存区域已经被释放,所以,再对str字符串进行复制时,
str已经是不合法的内存区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值