[英]__memcpy_ssse3() segmentation fault
我正在使用Opencv,試圖復制從網絡攝像機捕獲的某些幀。 復制框架時,在__memcpy_ssse3()
,行160或1675中__memcpy_ssse3()
分段錯誤。
gdb顯示:
0 __memmove_ssse3()位於../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:1675
在/home/david/opencv/OpenCV/OpenCV-2.4.2/modules/core/src/copy.cpp:181中的cv :: Mat :: copyTo(this = 0xbfca3450,_dst = ...)中為1 0xb75ec6d0
在/home/david/opencv/OpenCV-2.4.2/modules/core/src/matrix.cpp:510上的cv :: Mat :: Mat(this = 0xbfca358c,img = 0xb1300c90,copyData = true)中為2 0xb75984f6
調用它的函數是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。
有什么提示嗎?
SSE操作中的分段錯誤是由於內存未對齊引起的。 嘗試傳遞-mpreferred-stack-boundary=4 -mstackrealign
,看看是否可以清除它。 如果是這樣,則需要檢查堆棧以找出哪個代碼未對齊。
謝謝大家,解決了。 線程之間的鎖定存在錯誤,並且以某種方式覆蓋了內存或在其他線程中釋放了內存。 修復了鎖定依賴性后,segfault問題就解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.