__memcpy_ssse3()分段错误

时间:2012-07-16 15:39:48

标签: c++ opencv segmentation-fault

我正在使用Opencv,尝试复制从网络摄像头捕获的一些帧。复制帧时,我在__memcpy_ssse3(),第160或1675行中遇到分段错误。

gdb显示:

  

0 __memmove_ssse3()at   ../ sysdeps / I386 / i686的/ multiarch / memcpy的-ssse3.S:1675

     

1 0xb75ec6d0在cv :: Mat :: copyTo(this = 0xbfca3450,_dst = ...)at at   /home/david/opencv/OpenCV-2.4.2/modules/core/src/copy.cpp:181

     cv :: Mat :: Mat中的

2 0xb75984f6(这= 0xbfca358c,img = 0xb1300c90,   copyData = true)at   /home/david/opencv/OpenCV-2.4.2/modules/core/src/matrix.cpp:510

调用它的函数是cv::MAt::Mat(IplImg *I, bool copy)

当我打开USB摄像头或文件时,一切都很完美,但是当尝试通过IP从网络摄像头读取视频流时,它会在一分钟后崩溃。

我尝试在没有ssse3支持的情况下构建ffmpeg和opencv,并且我的应用程序也使用-mno-seee3标志编译。

Opencv vesion是2.4.2,但问题也存在于2.3.1中。 ffmpeg版本是11.1,在8.X中也是同样的问题。 gcc版本是4.6.3,Ubuntu的分支。 处理器是Intel core2。

任何提示?

2 个答案:

答案 0 :(得分:4)

SSE操作中的分段错误是由于内存未对齐造成的。尝试传递-mpreferred-stack-boundary=4 -mstackrealign以查看是否将其清除。如果确实如此,那么您需要检查堆栈以找出哪些代码未对齐。

答案 1 :(得分:1)

谢谢大家,解决了。 线程之间的锁定存在错误,并且在某种程度上内存被覆盖或在其他线程中释放。在修复了锁定依赖关系之后,segfault的问题就解决了。