最近在用opencv的时候发现程序老是莫名其妙出现“触发一个断点”问题。这种在编译和链接都没有问题,只在最后程序运行的时候出现的问题,实在是很不好找问题。错误信息量又不够多,导致百度老是找不到想要的解决方案。今天碰巧解决了这个问题,为了防止之后自己再遇到这个问题不会做,写下这篇博客警醒自己。我用的是VS2017(有点新),基本出错的页面是这样的。
如果程序触发断点,多半是内存读写的问题。这个时候要找错误的话需要找到“调用堆栈”这个窗口,在VS2017的默认窗口下实在右下角的这个位置。
在堆栈里一个一个的找基本就知道问题出在哪里了。像我这个程序最后我发现是在vector的析构时出了问题。
所以最后我就百度了一下为什么vector析构会出问题,最后在这个网站点击打开链接上找到了解决方案。里面他的解释是:这个不是opencv的问题,是调用dll的问题,dll中给vector分配成员空间,无论你是传引用,还是指针,只要vector的初始化容器大小,放不下成员,在dll中就会给vector增加空间,故解决方法如下:
预先在自己程序中分配好,1000只是个估值,根据实际大小最大值来设置。
所以我试着把我函数里所有的vector变量都预定义内存,之后就没出现这个问题了。