cyt
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2008年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
统计
随笔 - 36
文章 - 0
评论 - 67
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(8)
给我留言
查看公开留言
查看私人留言
随笔分类
Work(20)
(rss)
随笔档案
2008年1月 (1)
2007年9月 (1)
2007年3月 (3)
2006年11月 (2)
2006年4月 (2)
2006年3月 (2)
2006年1月 (3)
2005年11月 (2)
2005年10月 (20)
文章分类
C/C++
(rss)
Libraries
(rss)
好友Blog
hongrui
Rayman
(rss)
Turing
废人废语
(rss)
搜索
最新评论
1. re: 补充一个OCI的问题
评论内容较长,点击标题查看
--canyon
2. re: 如何在windows service里面控制console程序退出
cyt能给个用CreateRemoteThread实现的例子么?谢谢啊!
--DDGG
3. re: 如何在windows service里面控制console程序退出
评论内容较长,点击标题查看
--cyt
4. re: 如何在windows service里面控制console程序退出
评论内容较长,点击标题查看
--梦醒惊魂
5. re: drupal安装心得
看来也要感谢snowman,贴了这么多链接。不过俺不研究“防火墙”,这些好东西下次email给我就行了,呵呵。
--cyt
阅读排行榜
1. 使用std::vector的一个误区(3744)
2. epoll的安装和调试(3013)
3. Linux的系统性能监测参数获取(2163)
4. drupal安装心得(2080)
5. OCI访问Oracle的一些刁钻问题(1424)
评论排行榜
1. C++博客的精华区分类构想(意见收集)(8)
2. drupal安装心得(6)
3. 新版本的Qu(6)
4. 补充 BVRDE 使用的一些注意问题(6)
5. 使用std::vector的一个误区(4)
使用std::vector的一个误区
借助valgrind,终于找到一个隐藏很久的bug:
class
A
{
}
;
std::vector
<
A
>
vecArray;
vecArray.push_back(
);
vecArray.push_back(
);
vecArray.push_back(
);
A
&
a
=
vecArray.back();
vecArray.push_back(
);
以上的代码骤眼看上去也没有什么奇怪的地方,经过多次的测试也没有发现什么问题。但昨天bug终于爆发了,程序总是无缘无故down掉。
其实原因很简单,就是在 A & a = vecArray.back(); 这一步。
vector是一个会自增长的容器,自增长的结果就是把原来的内存释放掉,重新分配一个足够大的内存。既然原来的内存已经释放掉,那么a所引用的内存就是一段无效的内存。对无效内存的访问,后果有多严重就不用多说了。
想解决方法也很多,最简单就是用std::list或者std::deque替代vector。
posted on 2005-11-09 15:22
cyt
阅读(3744)
评论(4)
编辑
收藏
引用
所属分类:
Work
Comments
#
re: 使用std::vector的一个误区
glacjay
Posted @ 2005-11-09 22:06
不可以保存索引吗?必须要用指针吗?为了效率?
回复
更多评论
#
re: 使用std::vector的一个误区
cyt
Posted @ 2005-11-10 09:23
用索引是可以,不过个人不大喜欢用索引。其原因就是索引并不是stl容器所共有的特性,一旦使用了索引,以后如果需要转换为其他容器的时候,未免需要改动不少地方。另外,我这里所说的只是一种解决方法。对于我这种情况,只需要更改一个typedef定义就可以解决问题。如果改成是用索引的话,需要更改不少地方,而且很容易会漏了。
程序本身算法也比较复杂,相对来说使用索引性能也不会下降多少,这个倒不是什么需要考虑的地方了。
回复
更多评论
#
re: 使用std::vector的一个误区
nilaozi
Posted @ 2005-11-11 22:23
最后一次评论。也够出气了!
一个在blogjava失去家园的人声讨。
除了政治原因可以删了一个人blog,别的理由都不能成为理由。
我为每个都到他们所需的ebook难道错了,
贴到首页,我还以你们有预申机制,CSDN是这样,管理员认为可以才放到首页。
不信你到他们的首页看看。
http://csdn.blog.net/ahhoo
如果你认为还不错的,请到回贴。
回复
更多评论
#
re: 使用std::vector的一个误区
blues
Posted @ 2006-09-04 14:05
vector和deque的差别是操作上的,list虽然是基于链表的,但是不能随机访问,任何的容器都不是完美的,而且使用指针必然要判断,但也算是个bug,
我想解决的话类型用boost的any应该可以了,它本身带有安全检查,我没试仅是建议
回复
更多评论
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
如何在windows service里面控制console程序退出
补充一个OCI的问题
OpenDBX 一个访问多数据库的C类库
移植代码到64bits碰上的问题
db4o and GigaBase
实在惭愧
新版本的Qu
OCI访问Oracle的一些刁钻问题
Linux的系统性能监测参数获取
简单的类型安全format输出后记
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子技术博客