关于OpenCV中 CV_Assert() 的使用引起程序中止/崩溃问题

CV_Assert() 的作用是:若括号中的表达式值为 false ,则返回一个错误信息,并终止程序执行。

但是 CV_Assert()assert 不同,CV_Assert() 会通过异常抛出,所以如果使用 CV_Assert(),可以通过捕获异常而不是程序崩溃,而 assert 会直接导致程序崩溃。当然如果你没有捕获这个异常,也同样会引起崩溃。

参考文章:CV_Assert和assert的区别


简单通过代码测试一下:

首先是 assert 的使用:
如图所示,直接使用 assert 判定引发了程序的崩溃,也捕获不到异常。

然后直接使用 CV_Assert() 也是同样的效果,引起了程序的崩溃。
那么用异常捕获试一下:
程序是正常运行的,抛出的异常并没有引起程序的崩溃。

测试代码:

cpp 复制代码
#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 ++;
    }
}
相关推荐
牛奶8 分钟前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶10 分钟前
前端人为什么要学AI?
前端·人工智能·ai编程
罗西的思考3 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab4 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab4 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
格砸5 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云5 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny8655 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔6 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能
smallyoung6 小时前
AgenticRAG:智能体驱动的检索增强生成
人工智能