遇到的一个内存分配的问题
简单描述下遇到的问题.
主程序是有UI 的程序. QT.
程序启动后会有几个界面和线程开始跑.
其中一个界面的对象中一个定时器和一个QString value.
定时器timeout后, 执行以下:
1.value = SomeClass::getValue(). 此接口返回类型为QString.
之后没有对value写调用的地方.
2.调用一些C接口. 接口中有多次的calloc动作.
3.检查value的值.
异常:
经加打印发现.
计算QString value中的字符串地址. void* p = value.toLocal8Bit().data();
calloc申请的内存地址, 有时候会覆盖到 p 的空间.(发生几率大概为1/10 ~ 1/20).
问题重现的步骤都是 开机. 打印看p的地址及calloc申请的地址. 然后重启.
个人的理解:
QString中存储具体内容的char*空间是的动态申请的, calloc申请动态内存理论上不应该覆盖到这部分内存.
个人猜测的原因:
程序运行时内存被破坏, 导致系统识别p对应的内存为未被占用状态.
已经为这个问题纠结2天.
请问大家有什么想法么.