前段时间看了一本书,是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已经是不合法的内存区域。