目录
前言
一、常见错误
1、对NULL指针的解引用操作
2、 对动态开辟空间的越界访问
3、对非动态开辟内存使用free释放
4、使用free释放一块动态开辟内存的一部分
5、对同一块动态内存多次释放
6、动态开辟内存忘记释放(内存泄漏)
二、习题练习
题目1:
题目2:
题目3:
题目4:
前言
本章我们来学一些动态内存管理过程中我们常常会遇到的一些错误类型并分析几个动态内存方面的经典笔试题
一、常见错误
1、对NULL指针的解引用操作
开辟完动态内存空间之后要立即对指针进行判断是否为NULL,为NULL的话用perror打印错误信息并return 1
2、 对动态开辟空间的越界访问
注意开辟空间大小,防止越界访问
3、对非动态开辟内存使用free释放
4、使用free释放一块动态开辟内存的一部分
5、对同一块动态内存多次释放
如果第一次释放之后及时将指针置为NULL,则第二次相当于释放空指针,代码则不会出现问题,free一个空指针系统不会做任何操作
6、动态开辟内存忘记释放(内存泄漏)
这是一个很严重的错误,内存空间作为一个资源应该合理利用,当我们不用开辟的内存空间时应该及时把它释放
二、习题练习
题目1:
代码中存在的问题:
没有free,因为是传值调用,所以str里的值并未被改变,还是NULL,往空指针里放字符串系统会报错
题目2:
代码中存在的问题:
因为“hello world”是存放在栈区空间里面,所以出了函数该空间会被系统回收,此时返回的指针p则变为一个野指针,值赋给str再打印,系统会报错
题目3:
代码中存在的问题:
没有free
该代码是用传址调用的方式把开辟好的动态空间的地址赋给str,我们还可以用return的方式来实现把创建好的动态空间地址从函数中传出来
题目4:
代码中存在的问题:
不一定能打印出来str里面的内容,因为free之后开辟的空间已经归还给系统,能不能打印成功取决于系统接下来用没用这块空间,没用到也就是没篡改,那就能打印出来
本章到这里就结束啦,希望各位小伙伴可以点个关注,支持一下阿鹿,大家的鼓励是我前进的第一动力,3Q~