调试小记(主要记录自己的调试过程)---关于core dump
2013-08-27 16:14
405 查看
我就把我的程序简单化吧
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
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
相关文章推荐
- 关于 jquery select 的一些记录,主要方便自己查看
- KDB调试Linux4.2.6内核过程记录
- 关于codewarrior调试出现illegal BP的问题解决过程(转载)
- 记录一下自己的xen迁移过程
- 记录下关于安卓项目集成微信支付的过程
- 关于游戏制作过程中遇到的几个问题记录
- 自己记录下关于MAVEN创建多模块项目步骤(Eclipse)
- CanFestival win32程序调试过程记录 版本CanFestival-3-8bfe0ac00cdb
- jsdt 调试资料(自己记录)
- 关于自己的小记录
- 关于调试SPI、I2C、UART的记录
- 记录自己学习android系统启动以及 recovery过程(3)----------factory data reset -> reboot
- Eclipse开发调试ARM裸机程序(六)关于裸机调试i2c记录
- 关于place:909 的问题解决 --DDR3 调试记录
- oracle rownum用法关于分页,只要看懂了原理,你就明白了,也算是自己学习过程的一个思考
- 关于托管存储过程的部署, 调试和性能
- mysql 存储过程错误调试记录
- 综合应用WPF/WCF/WF/LINQ之二十二:关于单步调试存储过程的问题
- 关于orcale的数据库脚本,记录下来,方便自己以后用到查找
- 开始记录自己开发过程中的点点滴滴