调试小记(主要记录自己的调试过程)---关于core dump
来源:互联网 发布:腾讯云申请域名 编辑:程序博客网 时间:2024/06/05 23:03
我就把我的程序简单化吧
char *p=(char*)malloc(100);
后来我对p进行了运算,p++
最后我free(p)
这就报错了
我首先想去看malloc这个函数是什么,然后就钻到这个函数里看,只是看懂一些皮毛,只是知道这个函数不光是申请你所需要的内存,还申请了一部分记录你内存使用状况的结构的内存
后来也想看看free这个函数,也想多看看别人写的程序,自己学习学习。后来去查了一下什么是内存越界。
数组的内存越界很容易懂,我这数组就这么大,你访问到其他地方了,肯定不行啊。关于指针的,这里我有个疑问申请的内存有越界吗?我比如说我申请的只有10个字节的内容,却用了20个字节,也没有报错。看了一些别人写的相关文章,可能我只是踩的别人的空着的内存,所以没事。这里求高人指点。
然后,我上网查了写资料,什么情况下会内存越界?这个链接讲的不错http://blog.163.com/huang_bp/blog/static/123119837201003035231758/,大家可以看看。
后来我发现我把我的指针的地址都丢了,这样就释放不了了,所以我就把我以前的地址找回来。我就记录我用这个指针到底加了多少次,我再减去加的次数,这样就找回来了。这个就是所说的内存泄露吧。
关于上面指针的越界,我做了个实验,我本来要用的差不多20个字节,我只申请了3个字节,这个就是我踩到自己内存的尾巴了吧,所谓我内存的尾巴,就是我存储我申请的内存的使用记录的内存吧。这个就是内存越界吧。
关于内存越界,我觉得这篇文章讲的很好,http://blog.chinaunix.net/uid-27629626-id-3312297.html。
最后,再做点总结吧。就是对使用申请的指针的建议:
1)不要把指针当变量用,或者进行运算,这两种情况会丢失申请到内存的那块地址。可以当成数组用,或者*(p+num)如是用。
2)对于malloc这个函数,它是申请一定的内存,当内存不够用的时候,可以再申请点内存,可以用realloc()函数
3)记得用完要还回去,记得free
- 调试小记(主要记录自己的调试过程)---关于core dump
- 关于delete的时候core dump的调试经历
- 关于gdb调试core dump文件
- 调试 core dump 文件
- 开启Core dump调试
- core dump 调试程序
- Core Dump调试 /Z
- Linux core dump调试
- php 调试 core dump
- core dump调试
- core dump调试
- Linux core dump的调试技术(1)
- Linux core dump的调试技术(2)
- core dump的生成与调试
- Linux core dump的调试技术
- Linux core dump的调试技术
- Linux core dump的调试技术
- core dump的生成与调试
- 无法找到此网页
- 策略模式(Strategy)
- Flash图表控件FusionCharts自定义图表y轴最大/最小值
- V4L2总结(4)_代码示例_2__zzhere2007
- cocos2d-x 文件读取与存储
- 调试小记(主要记录自己的调试过程)---关于core dump
- 项目整改
- IIS7 配置 PHP5.6
- uva 1400 动态连续最大和
- inet address example(socket)
- JVM监控工具介绍
- Java学习笔记之 数组方法
- xcodebuild 用法
- Au3入门介绍