重工电子论坛

标题: 关于指针的问题 [打印本页]

作者: 顾福源    时间: 2018-7-22 22:57
标题: 关于指针的问题
最近被人问到一个这样的问题:
        假设某程序定义了一个全局gPtr,初始化时malloc了很大的一块内存区域(malloc执行是成功的),程序运行中若干线程都会使用到gPtr,但是都不会去释放它。当程序运行了若干天之后,程序崩溃了,定位发现gPtr的值变成了一个很小的值(如0x20) ,gPtr变为非法值可能的原因有哪些
作者: 顾福源    时间: 2018-7-22 23:05
这样的问题在实际的开发中我也遇到过好几次,经常都是一些全局的指针变量在运行过程中莫名奇妙的变得很小,导致在使用指针的时候出现程序崩溃的情况出现。每次遇到这样的问题,我都觉得是踩内存了,然后就在访问全局变量的地方加锁进行保护。通常在加锁保护全局资源后都能把问题解决掉,但是我一直都没真正弄懂过出现指针变小的原因,如果是踩了内存那又有什么比较好的方法可以对踩内存的情况进行排查?
在网上找了好久的资料,也没有找到什么比较靠谱的解释,今天把问题抛出来,希望能有大神赐教!
作者: 李维强-15级    时间: 2018-7-23 22:12
全局gPtr在malloc之后赋值,如果涉及到内存很大的情况,有可能被其他线程把该变量回收,或者就是进程内其他线程本身存在内存泄漏,很容易有这种情况。
建议你先在进程内调用全局gPtr的时候,每次都新开一个变量var,在把全局gPtr赋值给var,来调用,C++的话,就用引用来处理下,
当然加锁也是一种方法,加关键代码段即可




欢迎光临 重工电子论坛 (http://www.cqutlab.cn/) Powered by Discuz! X3.1