为什么我的vs2013 mfc程序没有调用D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\src? 50
我使用了别人电脑里拷过来的win32程序,在他的电脑里一切使用正常,在函数的结尾调用crt的库,内存可以得到释放。但是我在我的电脑里新建了一个mfc工程,将这个win32...
我使用了别人电脑里拷过来的win32程序,在他的电脑里一切使用正常,在函数的结尾调用crt的库,内存可以得到释放。但是我在我的电脑里新建了一个mfc工程,将这个win32程序改成了一个mfc程序,但是我的mfc程序却在单步调试时没有使用crt的库,导致内存得不到释放。不知道是什么原因导致的?附上这段代码
int DetectHuman(const char* filename, const char* outname, DetectionScanner& ds)
{
std::vector<CTRect> results;
IntImage<double> original;
original.Load(filename);
StartOfDuration();
ds.FastScan(original, results, 2);
PostProcess(results, 2);
PostProcess(results, 0);
RemoveCoveredRectangles(results);
cvNamedWindow("show");
IplImage* iplImage = NULL;
if (outname)
{
iplImage = cvLoadImage(filename);
for (unsigned int i = 0; i<results.size(); i++)
cvRectangle(iplImage, cvPoint(results[i].left, results[i].top), cvPoint(results[i].right, results[i].bottom), CV_RGB(255, 0, 0), 2);
cvShowImage("show", iplImage);
cvWaitKey(20);
cvReleaseImage(&iplImage);
}
return (int)results.size();
}
在别人的程序里单步调式时,return (int)results.size(); 按f10时,可以调用crt库中的delete.cpp delete2.cpp,释放内存,但是在我的电脑里,却不能释放内存,导致内存崩溃,不知是什么原因? 展开
int DetectHuman(const char* filename, const char* outname, DetectionScanner& ds)
{
std::vector<CTRect> results;
IntImage<double> original;
original.Load(filename);
StartOfDuration();
ds.FastScan(original, results, 2);
PostProcess(results, 2);
PostProcess(results, 0);
RemoveCoveredRectangles(results);
cvNamedWindow("show");
IplImage* iplImage = NULL;
if (outname)
{
iplImage = cvLoadImage(filename);
for (unsigned int i = 0; i<results.size(); i++)
cvRectangle(iplImage, cvPoint(results[i].left, results[i].top), cvPoint(results[i].right, results[i].bottom), CV_RGB(255, 0, 0), 2);
cvShowImage("show", iplImage);
cvWaitKey(20);
cvReleaseImage(&iplImage);
}
return (int)results.size();
}
在别人的程序里单步调式时,return (int)results.size(); 按f10时,可以调用crt库中的delete.cpp delete2.cpp,释放内存,但是在我的电脑里,却不能释放内存,导致内存崩溃,不知是什么原因? 展开
1个回答
展开全部
我认为,这是因为在两台电脑上使用了不同的模板库。
你对模板类函数右键,转到定义(goto definition)看看,再两台机器上可能指向了不同的头文件,原因应该是两个程序在不同的程序模式(win32、MFC)下,不同的模板库,对vector的操作要求不同。
你对模板类函数右键,转到定义(goto definition)看看,再两台机器上可能指向了不同的头文件,原因应该是两个程序在不同的程序模式(win32、MFC)下,不同的模板库,对vector的操作要求不同。
追问
本来释放内存的操作在最后return (int)results.size(); 中执行,但是在执行完cvWaitKey(20); 之后,后面的几句在单步调试的时候不再执行,不只是什么原因,是不是cvwaitkey中的值设定不正确?
追答
你是说只有cvReleaseImage没有执行?这个不执行,opencv对象就崩溃了,估计等不到results造成崩溃,有没有可能是没有cvDestroyWindow("show");的问题?
目测这段代码看不出什么其它问题。建议你,如果还是不行,先使用哪个win32程序在本机调试和运行一下,看看有没有问题(这个可能是opencv的原因),
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询