cyt
導航
C++博客
首頁
新隨筆
聯系
聚合
管理
<
2014年4月
>
日
一
二
三
四
五
六
30
31
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
1
2
3
4
5
6
7
8
9
10
統計
隨筆 - 36
文章 - 0
評論 - 87
引用 - 0
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
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訪問Oracle的一些刁鉆問題[未登錄]
這個有沒有具體的代碼?目前正好遇上這個問題了
--paul
2.?re: 使用std::vector的一個誤區
很同意的你看法
--lancen
3.?re: 新版本的Qu
評論內容較長,點擊標題查看
--home page
4.?re: 新版本的Qu
評論內容較長,點擊標題查看
--Web site
5.?re: 新版本的Qu
評論內容較長,點擊標題查看
--this link
閱讀排行榜
1.?使用std::vector的一個誤區(7957)
2.?epoll的安裝和調試(5852)
3.?我自己的signal / slot實現(5413)
4.?如何在windows service里面控制console程序退出(4605)
5.?OCI訪問Oracle的一些刁鉆問題(4532)
評論排行榜
1.?新版本的Qu(19)
2.?C++博客的精華區分類構想(意見收集)(8)
3.?使用std::vector的一個誤區(8)
4.?drupal安裝心得(7)
5.?補充 BVRDE 使用的一些注意問題(6)
使用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
閱讀(7957)
評論(8)
編輯
收藏
引用
所屬分類:
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應該可以了,它本身帶有安全檢查,我沒試僅是建議
回復
更多評論
#
re: 使用std::vector的一個誤區
stl
Posted @ 2008-10-06 01:03
STL里的容器大部分都是“值”容器,你用“引用”去訪問容器里的內容,錯了正常。這不是vector的問題,你自己使用的問題。如果基于性能考慮上面的程序一定要使用“引用”語意的話,應該用vector<A*>的寫法才比較正確。
回復
更多評論
#
re: 使用std::vector的一個誤區
過客
Posted @ 2008-11-04 08:42
樓上的同志說的好,STL的容器最好使用指針,
回復
更多評論
#
re: 使用std::vector的一個誤區[未登錄]
毛毛蟲
Posted @ 2011-08-20 21:40
我也覺得應該vector<A*>比較好。
回復
更多評論
#
re: 使用std::vector的一個誤區
lancen
Posted @ 2014-04-05 16:07
很同意的你看法
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
如何在windows service里面控制console程序退出
補充一個OCI的問題
OpenDBX 一個訪問多數據庫的C類庫
移植代碼到64bits碰上的問題
db4o and GigaBase
實在慚愧
新版本的Qu
OCI訪問Oracle的一些刁鉆問題
Linux的系統性能監測參數獲取
簡單的類型安全format輸出后記
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © cyt
免费国产99久久久香蕉
|
亚洲国产精品无码久久久久久曰
|
久久人妻少妇嫩草AV无码专区
|
久久午夜无码鲁丝片秋霞
|
jizzjizz国产精品久久
|
精品久久无码中文字幕
|
久久久久99精品成人片牛牛影视
|
欧美伊人久久大香线蕉综合69
|
久久人妻少妇嫩草AV无码专区
|
爱做久久久久久
|
久久精品国产网红主播
|
久久久噜噜噜久久中文字幕色伊伊
|
欧美va久久久噜噜噜久久
|
久久夜色撩人精品国产
|
久久婷婷国产麻豆91天堂
|
免费久久人人爽人人爽av
|
精品综合久久久久久88小说
|
久久久久久久波多野结衣高潮
|
久久美女网站免费
|
亚洲AV无码1区2区久久
|
午夜肉伦伦影院久久精品免费看国产一区二区三区
|
免费一级欧美大片久久网
|
久久精品人人槡人妻人人玩AV
|
国内精品伊人久久久久妇
|
久久久久久A亚洲欧洲AV冫
|
国产成人精品久久二区二区
|
亚洲精品国产第一综合99久久
|
一级做a爰片久久毛片16
|
久久精品中文字幕无码绿巨人
|
国产成人综合久久久久久
|
久久久久久久久久久久中文字幕
|
久久久久免费精品国产
|
久久久综合九色合综国产
|
日韩欧美亚洲综合久久影院Ds
|
蜜桃麻豆www久久
|
一本久道久久综合狠狠爱
|
欧美粉嫩小泬久久久久久久
|
99久久精品无码一区二区毛片
|
综合人妻久久一区二区精品
|
亚洲精品午夜国产va久久
|
囯产极品美女高潮无套久久久
|