经典的动态内存错误(下)
【摘要】 目录四、用free函数释放非动态内存函数开辟的空间 1.程序崩溃如图所示:五、多次用free释放同一空间六、动态内存函数申请空间后未进行释放(导致内存泄漏) 1.细致观看内存泄漏的方法:四、用free函数释放非动态内存函数开辟的空间我们都知道,动态内存函数在堆区,局部变量在栈区,全局变量在静态区#include<stdio.h>#include<stdlib.h>i...
目录
四、用free函数释放非动态内存函数开辟的空间
我们都知道,动态内存函数在堆区,
局部变量在栈区,全局变量在静态区
用了free函数堆区释放在栈空间上的内存,导致程序崩溃
1.程序崩溃如图所示:
所以我们在使用free函数时要先判断是不是动态内存函数申请的空间(malloc calloc realloc)。
五、多次用free释放同一空间
使用了free多次释放同一指针指向申请的内存空间。
这种情况容易出现在有许多代码(且前面忘了使指针为NULL),前面释放过后,p还是指向原位置。再次释放时为非法了,所以进行free函数释放时,记得free(p)后,要将p=NULL;这样就不会出错了,即使在进行n次释放也无所谓了,因为当释放的值是NULL时,free函数什么也不做。
如下改正:
六、动态内存函数申请空间后未进行释放(导致内存泄漏)
写一个极端点的例子效果更明显
这个采用放大的思想将多次使用动态内存函数申请内存空间而不释放的场景
这个代码运行之后我们可以看到内存并不断减少。具体操作看下图
细致观看内存泄漏的方法:
1.屏幕下方右击鼠标找到任务管理器:
2.找到性能
3.代码运行后观看内存的变化(涨到一定内存后由于系统的保护将不再涨了)
这就是全部动态内存的问题。
祝各位小伙伴学有所成,欢迎各位大佬指
正。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)