我的代码
function(Mat m , ...){
//some code here
vector<Mat> chnls;
split(LA, chnls);
// code to take each channel and find the max in each r and channel
for(unsigned int z = 0 ;z<5;z++){
//Mat m1 = chnls[z].clone();
//find number of elements in m that are not 0
//the layer and max comparison
Mat dest1;
compare(LAMax,chnls[z],dest1,CMP_EQ);
//make it binary
threshold(dest1,dest1,0,1,THRESH_BINARY);
//the layer and thresh comparison
Mat dest2;
compare(chnls[z],Scalar(thresh),dest2,CMP_EQ);
//make it binary
threshold(dest2,dest2,0,1,THRESH_BINARY);
//get the nonzero indexes
bitwise_and(dest1,dest2,dest1);
vector<Point> reslts = cvFind(dest1,0,1);
cout<<"z"<<z;
for(int i=0;i<reslts.size();i++){
lx.push_back(reslts[i].x);
ly.push_back(reslts[i].y);
}
lr.push_back(rvals[z]);
}
/* for(int i=0;i<chnls.size();i++){
chnls[i].release();
}*/
result.push_back(lx);
result.push_back(ly);
result.push_back(lr);
return result;}
每当我运行我的代码时,都会在运行时出现以下错误。
HEAP[tester.exe]: Invalid Address specified to RtlFreeHeap( 01270000, 01694E80 )
执行功能后和进入下一条指令之前会出现错误。
我搜索并发现这是由于一些狂野指针(一个指向无处的指针)错误。看看调用堆栈后面的细节显示
tester.exe!std::allocator<cv::Mat>::deallocate(cv::Mat * _Ptr=0x01694e80, unsigned int __formal=5) Line 140 + 0x9 bytes C++
tester.exe!std::vector<cv::Mat,std::allocator<cv::Mat> >::_Tidy() Line 1139 C++
tester.exe!std::vector<cv::Mat,std::allocator<cv::Mat> >::~vector<cv::Mat,std::allocator<cv::Mat> >() Line 560 C++
tester.exe!lower_eyelid_icb(cv::Mat m={...}, cv::Point_<int> center={...}, float iRadius=150.00000) Line 413 + 0x2a bytes C++
tester.exe!getEyelid(cv::Mat src={...}, cv::Mat * dst=0x0013f75c, cv::Point_<int> pupil={...}, int pRadius=31, int iRadius=150) Line 858 + 0x48 bytes C++
tester.exe!main(int argc=2, char * * argv=0x01275b20) Line 248 + 0x55 bytes C++
tester.exe!__tmainCRTStartup() Line 582 + 0x17 bytes C
如果我们查看boottom的第五行,看起来在释放矢量对象时会出现一些错误。
我在代码中有一个向量对象,我在for循环中使用它。声明和用法如下。
vector<Mat> chnls;
split(myMat,chnls) ; //myMat is a 2 Dimensional 5 channel object.
这就是我使用chlns的方式
compare(LAMax,chnls[z],dest1,CMP_EQ);
然后将每个通道与for循环内的矩阵进行比较。
可能是什么问题?
我正在使用VS2008和OpenCv 2.3。