ucrtbase.dll:一个无效的参数传递给一个函数,该函数认为无效的参数致命

我目前正在使用OpenCV开展个人项目,并且在执行该程序期间出现了一些问题。在实现了一个AKAZE + BOW识别器(对于我的问题,这似乎不够好),我想尝试一个SIFT(并最终实现SURF)。ucrtbase.dll:一个无效的参数传递给一个函数,该函数认为无效的参数致命

我的项目,我下面这一项上github发现我使用VS2015(社区)和OpenCV 2.4.13通过Windows 10

时遇到的问题,如标题所述,在于ucrtbase.dll在执行过程中得到一个无效参数(如果我正确读取其他线程,dll应该是Windows 10中的OS库)。当cicle移动到第二次迭代时(也就是说,当它应该获得用于BOW训练的另一个图像的特征时),这是执行停止并且标题中出现错误时出现的问题。我尝试了各种各样的东西(例如,使用不同的构造函数作为检测器/提取器或注释代码的一部分),并且在调试会话期间,似乎错误是由检测函数引起的,但我不确定为什么同样,如下面的代码所述,评论检测功能及其后面的功能修复了这个问题)。

drawKeypoints函数(在另一个测试中使用)似乎正确绘制关键点(这应该表示检测功能正常工作)。

下面你可以发现,竟然放弃错误的片段:

int main(int argc, char ** argv) 

{

const int nimages = 4;

const int nclusters = 2;

const char *datapath = "./database";

SiftFeatureDetector detector(400);

SiftDescriptorExtractor extractor;

Ptr<BOWTrainer> bow_train = makePtr<BOWKMeansTrainer>(nclusters);

for (int i = 0; i<nimages; i++)

{

Mat im, feat;

std::vector<KeyPoint> kp;

// read an image from the database

im = cv::imread(format("%s/%d.png", datapath, i + 1), 1);

// detect keypoints

detector.detect(im, kp); // commenting from here avoids the error

// extract features

extractor.compute(im, kp, feat);

// add features for bow training

bow_train->add(feat);

}

/* more stuff here */

}

告诉我,如果有其他任何你需要知道的理解问题。

在此先感谢您提供的任何帮助/建议。

编辑1:

我试图消除所有的圈子中,程序管理,以达到正确地执行所有功能的结束,而是从主返回时,它仍然给ucrtbase.dll错误。在VS调试过程中我注意到的另一件事是,调试器在需要释放内存(使用该dll)时产生一个异常,无论是在cicles期间还是在程序结束时。

我想这里的调试器有解决方案,但我真的不知道这个DLL的问题是什么,如果有人有时间空闲,任何帮助将非常感激。

编辑2:

经过测试它的几天好像错误是从的释放来:

std::vector< cv::KeyPoint >

如果关键点向量被实例化,只有程序结束时销毁,计算工作得很好,并有最终的DLL错误(这是烦人的,但为了快速测试,我可以应付)。

问题是我想创建使用这些向量的函数,而不必将它们作为参数传递。由于解除分配似乎是我不能在每次调用函数后程序崩溃的问题。我也曾尝试在vector上使用clear()和swap(),但那也不起作用。

我会一直试图弄清楚这一点,因为我保持编码,但任何帮助/见解将真正赞赏。

回答:

过了一段时间我想我想通了。

这似乎是VS2015编译器的问题:OpenCV 2.4.13与该版本的VS有一些问题,这可能是因为只有一个vc12文件夹,而不是vc14应该与VS2015一起工作(基本上compability不是充分保证)。

在转向OpenCV3.1构建(带有额外的模块)之后,程序正在运行而不会引发任何异常。

回答:

与矢量释放崩溃相关的这个问题似乎与链接错误版本的OpenCV库有关。如果你使用的是Debug,你需要链接到opencv_world320d.lib(或者opencv_world310.lib或者你使用的OpenCV版本的库) - 版本号后的“d”很重要。对于发布配置,请使用opencv_worldXXX.lib进行链接。

如果您看到“无效参数已传递给考虑...的函数”消息,则这是同一问题的症状。

以上是 ucrtbase.dll:一个无效的参数传递给一个函数,该函数认为无效的参数致命 的全部内容, 来源链接: utcz.com/qa/263336.html

回到顶部