0

我从以下对 Mat::Create 的调用中遇到分段错误

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

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

当我在 gdb 中运行我的程序时,我可以看到 rows 和 cols 都是有效的,并且我尝试了几种不同的数据类型,但无论我在这条线上得到什么 Segfault。

在调用 blend 之前,我的程序在 main() 中定义了其他几个 Mats,它们都工作得很好。以前有没有其他人遇到过这种情况?这个错误让我发疯,我在我的程序中找不到这个创建调用和其他任何调用之间的任何区别,但是这个每次都失败。

我的 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
4

1 回答 1

0

由于崩溃发生在 malloc.c 中,我怀疑您可能有内存损坏。尝试在 Valgrind 下运行程序来检测这一点。

于 2013-09-08T02:07:55.383 回答