"Access violation reading location 0x0000000000000000",使用 C++ 的 OpenCV 尝试打开图像

"Access violation reading location 0x0000000000000000", OpenCV with C++ trying to opening an image

#include <iostream>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;

// Driver code
int main(int argc, char** argv)
{
    //----- COMMAND LINE -----
    const String& filename = argv[1];
    Mat image = imread(argv[1]);

    //----- EXPLICIT WAY -----
    //const String& filename = "C:/Users/letto/OneDrive/Things/sonoio.jpg";
    //Mat image = imread(filename);


    // Error Handling
    if (image.empty()) {
        cout << "Image File "
            << "Not Found" << endl;

        // wait for any key press
        cin.get();
        return -1;
    }

    // Show Image inside a window with
    // the name provided
    imshow("Window Name", image);

    // Wait for any keystroke
    waitKey(0);
    return 0;
}

使用上面的代码,我正在尝试打开图片。

我尝试了两种方法:

  1. 命令行:我将图像url作为命令传递;
  2. 明确的方式:我明确地写了图像url。

第二种方法非常有效。 使用第一种方法我得到这个异常:

Exception thrown at 0x00007FFAC1FFF551 (ucrtbased.dll) in OpenImg.exe: 0xC0000005: Access violation reading location 0x0000000000000000.

我正在使用 Visual Studio 代码 2022,所以这是我通过命令行传递 url 的方式:

哪里出错了?请帮我看看,谢谢!

您已根据所附图片为 编译器 设置了额外的命令行参数,而不是 运行.

的应用程序

要向应用程序添加命令行,请右键单击项目 (OpenImg) 并选择“调试”->“命令参数”。

(而且,正如@user4581301 所提到的,通过检查 args 来验证参数是否存在会表明访问 argv[1] 会越界。这是一个很好的学习习惯。)