2013-05-30 4 views
0

Я получаю ошибку сегментации из следующего вызова Mat :: СозданиеSegfault из OpenCV Mat :: создать

void PoissonBlend::blend(Mat& src, Mat& dst, Mat& mask, Mat& out){ 

    Mat outer(mask.rows, mask.cols, CV_8U); 

Когда я запускаю свою программу в GDB я могу видеть, что оба ряда и перевалы действительны, и я пробовал несколько разных типов данных, но независимо от того, что я получаю Segfault в этой строке.

Моя программа определяет несколько других матов в main() перед вызовом blend, и все они работают отлично. Кто-нибудь еще сталкивался с этим раньше? Эта ошибка сводит меня с ума, я не могу найти разницу между этим вызовом для создания и любым другим в моей программе, но каждый раз это терпит неудачу.

Мой выход GDB является:

Program received signal SIGSEGV, Segmentation fault. 
_int_malloc (av=0x7ffff6fbe740 <main_arena>, bytes=307228) at malloc.c:3879 


#0 _int_malloc (av=0x7ffff6fbe740 <main_arena>, bytes=307228) at malloc.c:3879 
#1 0x00007ffff6c88fc5 in __GI___libc_malloc (bytes=307228) at malloc.c:2924 
#2 0x00007ffff791594d in cv::fastMalloc(unsigned long)() from /usr/lib/libopencv_core.so.2.3 
#3 0x00007ffff78884bc in cv::Mat::create(int, int const*, int)() from /usr/lib/libopencv_core.so.2.3 
#4 0x00000000004243da in cv::Mat::create (this=0x7fffffffdab0, _rows=480, _cols=640, _type=0) at /usr/include/opencv2/core/mat.hpp:368 
#5 0x0000000000427608 in cv::Mat::Mat (this=0x7fffffffdab0, _rows=480, _cols=640, _type=0) at /usr/include/opencv2/core/mat.hpp:68 
#6 0x00000000004255a7 in PoissonBlend::blend (this=0x7fffffffdd13, src=..., dst=..., mask=..., out=...) 
at /home/adam/WorkingCode/rasc/trunk/src/Poisson.cpp:95 
#7 0x0000000000423eb2 in main() at /home/adam/WorkingCode/rasc/trunk/src/PoissonTest.cpp:45 
+0

Не забыли ли вы инициализировать библиотеку? –

+0

Ваш другой код, возможно, испортил кучу? – Bull

+0

Существует много информации, отсутствующей в этом, например, Что такое * маска *, какова остальная часть кода и т. Д. Можете ли вы опубликовать полный источник для просмотра людьми. – GPPK

ответ

0

Поскольку аварии находится в пределах malloc.c, я подозреваю, что вы, вероятно, повреждение памяти. Попробуйте запустить программу под Valgrind, чтобы обнаружить это.

Смежные вопросы