调试小记(主要记录自己的调试过程)---关于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


原创粉丝点击