写入5k数据时,QAbstractSocket :: writeData中的SIGSEGV

时间:2016-01-29 05:43:52

标签: c++ linux qt qtnetwork

在ARM系统上工作,我在QAbstractSocket :: writeData(char const *,long long)中获得了一个SIGSEGV。我通过QIODevice :: write(char const *,long long)调用它,并且它是一个适度少量的数据。只需5k。

我检查正在发送的内存是否正确分配了new [],并且在发送之前QIODevice已打开。较小的数据包可靠地工作,但数据包过大时的确切阈值似乎有所不同。我二进制搜索它以发现它只有不到4k但是当在gdb中运行代码时它有点上升但我没有进行二进制搜索以找到确切位置。

有足够的ram备用,我可以将数据包大小增加到超过1M,而新的[]仍然很高兴。

Qt版本是4.8.6。

我宁愿不透露项目中的整个回溯痕迹,它揭示了项目的更多细节,而不是我想要的。但最重要的几帧是:

#0  0xb6b6ed6c in __memcpy_neon () at ../ports/sysdeps/arm/armv7/multiarch/memcpy_impl.S:596  
#1  0xb6f71dce in QAbstractSocket::writeData(char const*, long long) () from /usr/lib/arm-linux-gnueabihf/libQtNetwork.so.4  
#2  0xb6d9b5fe in QIODevice::write(char const*, long long) () from /usr/lib/arm-linux-gnueabihf/libQtCore.so.4

关于出了什么问题的任何想法?

0 个答案:

没有答案