C++ 打开CV+;Visual Studio 2008奇怪的调试问题

C++ 打开CV+;Visual Studio 2008奇怪的调试问题,c++,visual-studio,visual-studio-2008,opencv,C++,Visual Studio,Visual Studio 2008,Opencv,我最近在Visual Studio 2008 professional edition下安装了OpenCV2.0,构建了库、dll-s并使一切正常运行,但当我运行第一个示例程序时: #include “highgui.h” int main( int argc, char** argv ) { IplImage* img = cvLoadImage( argv[1] ); cvNamedWindow( “Example1”, CV_WINDOW_AUTOSIZE ); cvShowImage(

我最近在Visual Studio 2008 professional edition下安装了OpenCV2.0,构建了库、dll-s并使一切正常运行,但当我运行第一个示例程序时:

#include “highgui.h”
int main( int argc, char** argv ) {
IplImage* img = cvLoadImage( argv[1] );
cvNamedWindow( “Example1”, CV_WINDOW_AUTOSIZE );
cvShowImage( “Example1”, img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( “Example1” );
}
它直接进入调试模式,出现以下异常:
HelloOpenCV.exe中0x7855b9f0处未处理的异常:0xc000005:访问冲突读取位置0x00000000。

它还会切换到“loadsave.cpp”文件,并指向以下行:

return (IplImage*)cv::imread_(filename, iscolor, cv::LOAD_IMAGE );
在堆栈点:
>highgui200.dll!cvLoadImage(const char*filename=0x00000000,int iscolor=1)行474+0x13字节C++

我还使用VisualStudio调试窗口制作了一个打印屏幕

我认为这与放错地方的依赖项、dll-s的问题有关。 如果有人知道我能做些什么来解决这个问题,请回答,我将永远感激

谢谢,
亚历克斯

这不是一个直接的回答,但我会试着在网上提问。它相当活跃,那里一定有人知道。每当我在那里提出问题时,都会在几个小时内得到答复。

您是否在命令行参数中为
argv[1]
指定了有效的文件,即要读取的图像的
文件名?

我认为您的命令行参数不正确


确保命令行参数有效。

您需要验证是否有足够的命令行参数。应该在main()的开头添加如下内容:

if(argc<2)
{
fputs(“用法:prog filename\n”,stderr);
出口(1);
}
否则如果(argc>2)
{
fputs(“忽略额外参数”,标准输出);
}
您还可以修改代码以依次使用每个命令行选项(如果这样做,您可能希望删除上面示例中关于额外参数的警告):

int-arg;
对于(arg=1;arg

最后,由于屏幕截图显示您正在调试器中启动可执行文件,因此需要修改属性以添加命令行参数。在项目的属性中,您希望选择“调试”选项卡,然后将文件添加到“命令参数”中。

如其他答案所示,程序运行时没有命令行参数。您应该这样做,以便您的程序在没有它们的情况下正常运行

但除此之外,为了帮助您使用正确的参数进行调试,您可以指定在VS项目的“调试”选项卡的属性页中启动调试器时要传递给程序的命令行参数。这是“命令参数”设置

if (argc < 2)
{
    fputs("Usage: prog filename\n", stderr);
    exit(1);
}
else if (argc > 2)
{
    fputs("ignoring extra parameters\n", stdout);
}
int arg;
for (arg = 1; arg < argc; ++arg)
{
    IplImage* img = cvLoadImage( argv[arg] );

    ... the rest of your code ...
}