vector出现的问题 push_back/insert 操作导致内存错
(2009-03-02 10:33:13)
标签:
vectorpush_backrelease内存出错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,以后硬盘大小还是不要随便调整的好。