在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
关于出了什么问题的任何想法?