free失败多是内存越界造成的
2016-04-20 16:09
295 查看
<span style="font-size:14px;">#include <stdio.h> #include <stdlib.h> int main(int argc, _TCHAR* argv[]) { char *p =(char *)malloc(10); p++; free(p); return 0; }</span>
指针申请后被修改再free会失败
这个free错误则不好查找,因为实际的程序往往没下面的例子这么简单,可能从申请到最后释放跨域多个模块、大量的处理代码逻辑,指针初始值被修改掉,也就是说分配的这段内存的“门牌号”被改掉了,那么free就会失败。当我们释放动态分配的内存时,通常会遭遇内存释放失败的错误,我遇到这么一个问题,当我无意间越界访问了动态分配内存时,在释放内存时,就会出现Access violation writing的错误,但我不太确定是不是由于这个原因引起的错误,希望高手解释一下,引起free失败的常见原因
使用free(ptr)释放ptr指向的内存时并不需要提供要释放内存的大小,这是因为在ptr附近的某个位置存放有维护该内存区域的数据,这是由内存申请函数 malloc 等产生的。实际上在ptr之前有个结构体,指示了该块内存的信息。如果你的程序因为内存越界内修改了这个结构体,则会导致free函数出错返回,并不释放任何内存。 其他出错情况也大多由于类似原因,比如传递了错误的指针,该指针已经被释放或与空闲空间中的某个区块重叠等。
相关文章推荐
- 轻松搞定java内存模型(零)总括
- 第N个回文数列
- 使用itext生成pdf的,各种布局
- Android 最火的快速开发框架XUtils
- location hash(#)
- 已下载csdn资源
- C 中可调用的linux相关函数
- NSCharacterSet
- sun.misc.BASE64Encoder找不到jar包的解决方法
- request
- c/c++程序的文件结构
- 为UIView添加点击事件
- Android快速开发框架-ZBLibrary 源码分享
- Eclipse/MyEclipse注释模板和格式化模板的使用
- java中super和this用法总结
- 每个公司、每个社区,都需要不止一个“灵魂人物”。
- 使用js操作css实现js改变背景图片示例
- Android性能优化典范 - 第1季
- 开关电源输出整流二极管
- Angular浏览器插件Batarang介绍