加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

vector出现的问题 push_back/insert 操作导致内存错

(2009-03-02 10:33:13)
标签:

vector

push_back

release

内存

出错

it

分类: C/C++问题

文章来源:http://mailao.ycool.com/post.1851141.html

我的程序现象:主要是利用vector对一系列数据进行操作的时候,Debug模式下运行没有问题,但是有时候在Release版本下运行的时候,会出现内存溢出的错误,具体错误的代码都停止在push_back这个地方,这个很让人郁闷,所以在网上找了下面这篇文章,利用reserve预先设定一个内存大小,这样问题就迎刃而解了……还要谢谢这个作者。

正文如下:

这是个很诡异的问题。
vector内放的是一个二维空间内的一个坐标值。
vector< FAVector2D<unsigned int> > m_FPs;
FAVector2D这个模板,我自己定义的,用了少说有几个月了没出过问题,昨天偏偏在执行push_back操作时出现错误
Invalid Address specified to RtlValidateHeap( 003D0000, 003B7878 )
,debug跟踪到堆里边内存操作,是某个地方释放内存pUserData出错了。即是内存越界问题啦。
百度搜到的解都说是因为自定义类的拷贝构造,赋值函数等有问题。
查了半天也没看出是啥问题,想还是换个类吧。自己定义的可能有问题一时半会儿也查不出来。
正好这几天看了点OGRE的代码,就从里边剪出来一个Vector2的类,能够实现我要的东西。
这下总该好了吧,就在觉得峰回路转,柳暗花明时,“bang!”又报错了!搞了一晚上都没搞定。
百度中能想到的关键词都搜了,Primer都翻了几遍关于vector操作的也不行。
哎~正在无可奈何时,出现一点曙光:
在m_FPs所在类的构造函数中加了一句:m_FPs.reserve(100);
OK! 搞定!

哎,还是编码习惯不好。使用stl时应该估算程序使用内存大小,做个预留。嗯以后谨记啊!mellow!

正在high时,旁边正在调整分区容量的笔记本上,PM罢工啦!靠!重启以后进不了grub啦!幸好在实验室,临时刻了一张
ubuntu 7.10 的live CD。恢复了grub。

NND,以后硬盘大小还是不要随便调整的好。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有