关于OpenCV中 CV_Assert() 的使用引起程序中止/崩溃问题
2023-12-26 09:45:11
CV_Assert()
的作用是:若括号中的表达式值为 false
,则返回一个错误信息,并终止程序执行。
但是 CV_Assert()
与 assert
不同,CV_Assert()
会通过异常抛出,所以如果使用 CV_Assert()
,可以通过捕获异常而不是程序崩溃,而 assert
会直接导致程序崩溃。当然如果你没有捕获这个异常,也同样会引起崩溃。
参考文章:CV_Assert和assert的区别
简单通过代码测试一下:
首先是 assert
的使用:
如图所示,直接使用 assert
判定引发了程序的崩溃,也捕获不到异常。
然后直接使用 CV_Assert()
也是同样的效果,引起了程序的崩溃。
那么用异常捕获试一下:
程序是正常运行的,抛出的异常并没有引起程序的崩溃。
测试代码:
#include <iostream>
#include <assert.h>
#include <exception>
#include "opencv2/highgui.hpp"
#include "opencv2/core/core.hpp"
#include <opencv2/core.hpp>
#include <ros/ros.h>
int main()
{
int i = 0;
while(1){
// 1. assert
// assert(1 > 2);
// try {
// assert(1 > 2);
// } catch (cv::Exception& e) {
// std::cout << e.what() << std::endl;
// }
// 2. CV_Assert
// CV_Assert(1 > 2);
try {
CV_Assert(1 > 2);
} catch (cv::Exception& e) {
std::cout << e.what() << std::endl;
}
sleep(1);
std::cout << i << std::endl;
i ++;
}
}
文章来源:https://blog.csdn.net/qq_39266065/article/details/135212785
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!