为什么free不像malloc一样需要长度参数?
来源:互联网 发布:四大名捕知乎 编辑:程序博客网 时间:2024/04/29 17:47
博客上排版更佳: http://yonghaowu.github.io/2016/05/11/malloc_free/
大家先看看下面的程序:
#include <stdio.h>#include <stdlib.h>int main(void){ char* c = (char*)malloc(100); c[0] = 'w'; c[1] = 'o'; printf("%s\n", c); free(c+2); printf("%s\n", c); return 0;}
申请了内存后, 使用了2个字节, 后面98个字节不用了, 就把它们free了.
你认为这样可以吗?
在mac中结果如下:
woa.out(26501,0x7fff780d2000) malloc: *** error for object 0x7fd201c032e2: pointer being freed was not allocated
为什么会说未分配呢?
其实, 问题与free申请好的内存的时候不需要指定释放多少size的内存有关.
因为在malloc(100)
的时候, 不仅仅申请了100的内存, 还申请多了4字节或者8字节的内存, 用来存放
额外的数据来记录内存的大小.
free的时候, 就去读取这里面的信息, 得到100, 然后释放从参数指针所指的内存开始到100字节后结束.
假如, 我们free了c+2的地址, 那时候找到的长度信息就不是100而是其他了, 释放的内存说不定多于100, 于是mac下就给出如此的警告.
0 0
- 为什么free不像malloc一样需要长度参数?
- C++中有了malloc/free,为什么还需要new/delete?
- C++中有了malloc/free,为什么还需要new/delete?
- C++中有了malloc/free,为什么还需要new/delete
- C++有了malloc和free,为什么还需要new/delete
- C++中有个malloc/free,为什么还需要new/delete?
- 面试题:C++有了malloc/free,为什么还需要new、delete?
- 有了malloc/free为什么还要new/delete
- 有了malloc/free为什么还要new/delete ?
- 有了malloc/free为什么还要new/delete
- 有了malloc/free为什么还要new/delete?
- 有了malloc/free为什么还要new/delete?
- 有了malloc/free为什么还要new/delete?
- 有了malloc/free为什么还要new/delete?
- 有了malloc/free为什么还要new/delete ?
- 有了malloc/free为什么还要new/delete?
- 有了malloc/free为什么还要new/delete?
- 有了malloc/free为什么还要new/delete ?
- 为您揭开runtime的神秘面纱 <一>
- 安卓集成SharedSDK第三方平台分享
- java生成word文档
- 第十六周--阅读程序
- 笔记︱信用风险模型(申请评分、行为评分)与数据准备(违约期限、WOE转化)
- 为什么free不像malloc一样需要长度参数?
- 简单的求文本占用的高度、范围 boundingRectWithSize sizeWithAttributes
- JS相关事件
- AS解决在导入library之后lable/icon/theme合并出现bug
- linux 安装nginx
- 《java并发编程实战》第10章:避免活跃性危险
- 二分与贪心-烘晾衣服(算法基础 第9周)
- 从百度地图批量获取中国县级以上行政区划边界坐标
- 关于qt中的tr()函数