4

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

gdb 显示:

0 __memmove_ssse3 () 在 ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:1675

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

2 0xb75984f6 in cv::Mat::Mat (this=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。

有什么提示吗?

4

2 回答 2

8

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

于 2012-07-16T18:37:35.920 回答
4

谢谢大家,解决了。线程之间的锁定出现错误,并且不知何故,内存在其他线程中被覆盖或释放。修复锁依赖后,段错误的问题解决了。

于 2012-07-18T15:22:19.423 回答