代码之家  ›  专栏  ›  技术社区  ›  MBZ

注释下面的代码行如何改变前面代码行的行为?

c++
  •  0
  • MBZ  · 技术社区  · 16 年前

    我相信这不是一个与openCV相关的问题,但是由于使用这个库时发生了错误,这可能是一个有趣的问题。

    在下面的代码中,通过将错误的参数 ,的 负载 函数引发预期的异常。
    有趣的是,通过在catch块之后注释下面的两行,代码根本不会抛出任何异常。

    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
    cv::CascadeClassifier c;
    try
    {
        c.load( std::string("") );
    }catch(...)
    {
        cout << "Exception";
    }
    cv::FileStorage fs( std::string(cascade_name), cv::FileStorage::READ );
    bool t2 = fs.isOpened();
    bool t = c.empty();
    if ( cascade == 0 )
        return -1;
    return 0;
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Nick    16 年前

    一般来说,这取决于项目的环境/假设:只要环境合适,这是可能的。

    例如:

    您正从多个线程运行此函数,并且在openCV库中FileStorage对象与cascadescalifier对象交互(共享变量等)。一个线程中的代码路径导致另一个线程在::load方法上出错。

    我见过这样的事情的次数是(按可能性排序): -行的添加导致了多线程同步的一些问题(在代码中或库中) -添加代码导致计时更改,从而导致错误