内存溢出的问题

xiaoxiao2021-02-28  87

很久没看代码了,也很久没发表技术博文了。似乎有点挂羊头卖狗肉的感觉,今天写一篇关于内存溢出的问题,倒不是心理的愧疚,而是确实发生的事情,正好当做一篇博文写写。

前几天去朋友那边办点事情,正好他在调试加密函数,然后他大概调试了2个小时吧,就问我,奇怪了,怎么函数执行完了,不返回到main函数呢。我说你调试一遍我看看,然后还真事,执行到函数最后一行,再执行就异常了。我说这种情况应该是内存溢出的问题,内存溢出破坏了函数栈,函数执行完了,也不知道返回到哪儿去。然后我让他打印一些信息试试,结果看也正常执行了。我说你这样,你函数从开始就return看看呢。然后这样找到了出问题的一行代码,是调用字符串转换成十六进制函数。也许有人会说,不用这么麻烦啊,windows程序生成map文件,一看就知道是在哪行出问题了啊。不好意思,我忘记说了,这事是发生在mac笔记本上。如果是我,我也许也会选择先在Windows下测试的。言归正传,找到了函数哪行出问题了,我说,那你调试进去看看呢,断点到函数最后一行,发现果然是内存的问题,调用的时候申请分配的内存是8,最后给17的位置赋值\0。然后回到调用的地方,那就知道问题了,字符串的长度是8,给十六进制申请分配的内存是8+1,这显然是不对的,应该是8*2+1。知道问题了,修改了后,测试可以了。然后我那朋友说,这网上找的代码不靠谱啊。我说,参考参考还是可以的。也许有的人要说了,怎么明显的问题都看不出来,还要测试啊。首先呢,是网上找的代码,你是不会也不可能每一行都看的,更不用说看懂了。当然正常的情况是要先看懂,那就看你的boss给不给足够的时间啦。

解决问题后,我们闲聊,我说最开始接触这个的时候,听那些人讲,什么内存泄露,内存溢出,野指针啥的,完全不知道是什么玩意。现在其实接触多了,你实践与理论结合去分析问题,实践中理解理论,理论指导实践,相辅相成。而很多人,可能是不善于表达,又或者是只知其一不知其二,总喜欢把理论搞的很神秘似的,其实完全没必要,实践得真知。能用通俗易懂的言语把理论讲明白,而不是照本宣科的讲理论的人,那肯定是付出很多实践总结出来的。这种人值得我们学习。没有自夸的意思,我还在不断的学习中,其实很想发技术博文的,总是一些事情要去处理,说这些似乎有些为自己辩解,好吧,我反省。

转载请注明原文地址: https://www.6miu.com/read-61430.html

最新回复(0)