OpenCV中文网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 安装 配置
查看: 567|回复: 8

vector<vector<Point>>释放内存出现错误

[复制链接]
发表于 2016-10-14 14:26:12 | 显示全部楼层 |阅读模式
本帖最后由 王宏硕 于 2016-10-14 14:30 编辑
  1. void _Tidy()
  2.                 {        // free all storage
  3.                 if (this->_Myfirst() != pointer())
  4.                         {        // something to free, destroy and deallocate it
  5.                         this->_Orphan_all();
  6.                         _Destroy(this->_Myfirst(), this->_Mylast());
  7.                         this->_Getal().deallocate(this->_Myfirst(),
  8.                                 this->_Myend() - this->_Myfirst());
  9.                         this->_Myfirst() = pointer();
  10.                         this->_Mylast() = pointer();
  11.                         this->_Myend() = pointer();
  12.                         }
  13.                 }
复制代码

每次老卡在_Destroy(this->_Myfirst(), this->_Mylast());那里,是因为vector中的元素太多的原因吗(size是800,有800个point)
回复

使用道具 举报

发表于 2016-10-14 22:11:50 | 显示全部楼层
把出错信息贴出来吧
回复 支持 反对

使用道具 举报

发表于 2016-10-15 07:43:01 | 显示全部楼层
800不算多,而且vector是std的库,应该自动销毁。肯定是其他地方出了问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-17 16:32:19 | 显示全部楼层
mercury2008 发表于 2016-10-14 22:11
把出错信息贴出来吧


大概就是这样,遇到500多一下的就没问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-17 16:36:27 | 显示全部楼层
mercury2008 发表于 2016-10-14 22:11
把出错信息贴出来吧
  1. void bwareaopen(Mat &src, int n)
  2. {
  3.         //复制原图用于叠加
  4.         Mat temp = src;
  5.         temp = reverse(temp);
  6.     vector<vector<Point>> contours;
  7.         findContours(src, contours,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
  8.         //Mat resultImage = Mat::zeros(src.size(), CV_8U);
  9.         //        drawContours(resultImage, contours, -1, Scalar(255, 0, 0), 1, 8);
  10.         //imshow("轮廓", resultImage);
  11.         for (int i = 0; i < contours.size(); i++)
  12.         {
  13.                 double dArea = contourArea(contours[i]);
  14.                 if (dArea <= n)
  15.                 {
  16.                         drawContours(src, contours, i, Scalar(255), CV_FILLED);
  17.                 }
  18.         }
  19.         vector<vector<Point>>().swap(contours);
  20.         threshold(src, src, 130, 255, CV_THRESH_BINARY);
  21.         addWeighted(src, 1, temp, 1, 0.0,src);
  22. }
复制代码

这个是出问题的部分,在最后vector<vector<Point>>().swap(contours);时就出现那样的错误了
回复 支持 反对

使用道具 举报

发表于 2016-10-18 09:31:00 | 显示全部楼层
其实这种问题,你用debug调试观察变量结果就可以知道了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-18 11:32:25 | 显示全部楼层
mercury2008 发表于 2016-10-18 09:31
其实这种问题,你用debug调试观察变量结果就可以知道了。

所有测试图片只能release跑啊 debug程序跑不起来
回复 支持 反对

使用道具 举报

发表于 2017-1-11 18:36:01 | 显示全部楼层
楼主你解决这个问题了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-13 20:32:02 | 显示全部楼层
akizya 发表于 2017-1-11 18:36
楼主你解决这个问题了吗?

最后还是没有解决啊
在VS2015下释放二维Point还是出错,只能不释放了
不过在Qt中用mingw32编译没有事,现在转Qt了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|感谢博安盈科技资助本网站|OpenCV中文网站 ( 粤ICP备13079875号-2  

GMT+8, 2017-2-22 09:55 , Processed in 0.098661 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表