我用这个功能来分割字符图像,但是程序崩溃了,有人可以帮我找到解决办法,为什么它会崩溃?
问问题
300 次
1 回答
0
您需要查明导致崩溃的行。为此,我可以通过两种方式思考:
- 使用调试器;
- 或者如果您害怕,请使用以下
printf()
方法:
该printf()
方法涉及printf()
在程序中的每个函数调用之后进行调用,因此当您运行应用程序时,您可以在控制台中看到最后printf()
一条消息是什么。这将帮助您找到导致崩溃的代码。例子:
printf("dbg10\n");
IplImage *img_cv = cvLoadImage("plaque.jpg");
printf("dbg20\n");
cvSetImageROI(img_cv,cvRect(8,10,60,35));
printf("dbg30\n");
IplImage *img_pl = cvCreateImage( cvGetSize(img_cv),img_cv->depth,img_cv->nChannels);
printf("dbg40\n");
cvCopy(img_cv,img_pl, NULL);
printf("dbg50\n");
cvResetImageROI(img_cv);
printf("dbg60\n");
//etc
从我在您的代码中看到的情况来看,前 2 个调用有可能使您的应用程序崩溃:如果cvLoadImage()
无法加载图像,它将返回一个 NULL 指针。由于下一个函数接收指针作为参数,它会尝试取消引用空指针,这可能会导致崩溃。解决方案?始终检查您拨打的电话的惊人回报:
IplImage *img_cv = cvLoadImage("plaque.jpg");
if (!img_cv)
{
printf("Failed to load image.\n");
exit(1);
}
cvSetImageROI(img_cv,cvRect(8,10,60,35));
于 2012-04-11T04:19:07.430 回答