Free()内存释放问题
来源:互联网 发布:mac idea gradle 配置 编辑:程序博客网 时间:2024/04/29 14:49
我们知道free(p)是释放掉p所指向的内存,那么是释放了多长的一段内存呢?我们的系统是如何知道要释放多少内存的呢?下面我来讲讲这个问题。
请看下面一段代码
显然, pchar 和 pint 均被分配了4个字节的内存。
那么:
(1) free(pchar);
(2) free(pint);
这两条语句是释放了多少的内存呢?
语句(1)中是释放了8个字节的内存还是1个char数据所占的内存?
语句(2)中是释放了8个字节的内存还是1个int数据所占的内存呢?
实际上,无论是语句(1)还是语句(2)都释放了8个字节内存,和他所指向的数据类型没有关系。决定free(p)释放多大的内存块,是在malloc的时候就已经确定了的,大多数实现分配存储空间的时候实际所分配的空间会比要求的大一些,额外的分配的空间会用来记录管理信息,比如分配块的长度,指向下一个分配块的指针等等...所以说你malloc分配了多少空间,free的时候就会释放相对应的空间大小。
再看下面一段代码
上面这段代码或许能够正常运行,但实际上是错误的。
上面这段代码没什么问题,问题出在下面的代码上
我们已经知道调用free的时候释放内存的大小是在malloc的时候就确定下来了的,一旦指针指向了malloc所分配的那段内存,内存释放的时候就会释放在malloc时所申请的那段大小(本例中是1000字节),如果改变了指针的指向,比如向后或者向前移动了一段位置,程序运行时往往会出现错误,而且该错误极其隐蔽。
上图给出了非常直观的图示便于理解。
作者本人水平有限,错误之处还望之处,谢谢!
作者声明:
本人 ZhangZeyu对以上所有任何内容和资料享有版权
转载请注明作者本人ZhangZeyu 及出处
向您的厚道致敬。谢谢!
- Free()内存释放问题
- 关于free释放内存
- 内存释放free
- free函数释放内存
- free内存释放的理解
- 实例介绍利用valgrind定位内存异常释放问题(double free 和wrong free)
- malloc内存分配与free内存释放
- Linux中如何释放cache内存 free
- malloc,free动态申请释放内存机制
- free()释放动态内存的函数
- free函数——内存释放
- stm32 移植cJson 注意free释放内存!!
- stm32 移植cJson 注意free释放内存!!
- double free 内存问题
- double free 内存问题
- JS内存释放问题
- js 内存释放问题
- UIScrollview 内存释放问题
- ARC 项目与非ARC代码文件兼容方法
- [LeetCode] Binary Tree Level Order Traversal
- Eclipse引入jar包的三种方式
- Fence Repair
- Binary Tree Level Order Traversal II
- Free()内存释放问题
- Mineral Water
- CListCtrl中SetItemData和GetItemData的用法
- 轻松调整C盘分区大小
- HDU 1078 FatMouse and Cheese(记忆化搜索)
- 玩游戏学前端——猜颜色、选择器
- SIFT算法的一些基本概念
- Ubuntu下配置samba实现文件夹共享
- Qt模块化笔记之core——Input/Output文件操作-流QDataStream使用