文章目录
- 摘要
- 1 使用全局静态变量
- 2 不取第一个和最后一个数
- 3 将数据计算放到同一线程计算
- 4 替换槽函数
- 5 修改传值为const
- 6 神奇的环境因素
- 7 更神奇的板子差异
- 8 另一个细节Aborted
- 最后
关键字:
Qt
、
Aborted
、
corrupted
、
double
、
linked
摘要
额,结论,没有搞定,最后通过守护进程先糊弄过去,这个项目过了证就扔了,所以目前不准备在修复,这里简单记录下我都尝试了那些东西
corrupted double-linked list Aborted,谷歌翻译的结果就是 双链表损坏。
1 使用全局静态变量
遇到这个问题首先就是要百度,有一个声音说是重复释放了,所以我这里尝试把我函数中所有的局部变量都弄成静态全局变量,这样测试还是没有解决问题。
2 不取第一个和最后一个数
其实到这里,已经开始不自信了,项目中用到了多线程,数据交换用的是vector,线程A 每次都是追加一个数据,删除第一个数据,线程B读取线程A的数据,并进行相关计算,开始我只直觉读取vector的begin 和end 了,后面做了+1 和-1,想的是不是加锁没有成功,导致,最后发现还是会崩溃。
3 将数据计算放到同一线程计算
后面我尝试吧数据的计算都放到一个线程里面,另一个线程只读线程的属性值就可以,但是还是一样的崩溃。
4 替换槽函数
其实这个也不知道有没有实际的作用,我开始是将数据B的读取数据写到了一个定时器的槽函数里面,这样每次定时去读取数据,发现崩溃后,我尝试了定时器发送信号,在线程里面在实现一个槽函数,来读取数据,测试结果还是崩溃
5 修改传值为const
这个理解其实应该是有偏差的了,我开始给函数传vector 的时候,是直接传递的,这里其实应该也是传递了一个指针,发现层亏后,我在将函数参数加了const ,结果还是崩溃
6 神奇的环境因素
我在X86 的机器上挂Debug测试没有测到崩溃的时候,而在真实的Arm板子上跑就会崩溃,这个也是一个搞不定的问题。阿西,
7 更神奇的板子差异
板子是同一个板子,只是系统稍微有点差别,在家里好歹可以撑到40分钟,甚至更长的几小时,在现场基本就是30分钟内必然崩溃,而我板子试试安装的库可能更多一点,按道理,没啥差别,都是厂家自带的系统。
8 另一个细节Aborted
这里我感觉,我的程序不是自己运行崩溃了,而是被系统给kill了。所以问题出在哪里呢。
最后
到这里,我也没有彻底解决这个问题,所以我准备重写了。
参考资料
https://bbs.csdn.net/topics/392140813?list=lz
https://stackoverflow.com/questions/18035080/malloc-crashes-saying-corrupted-double-linked-list
https://www.cnpython.com/qa/1324332
https://www.coder.work/article/112395
https://www.zhangshilong.cn/work/172885.html
https://blog.csdn.net/weixin_39094034/article/details/110225908
https://blog.csdn.net/liuzehn/article/details/80830279
https://cloud.tencent.com/developer/article/2054858
https://www.dovov.com/sigabrt6.html