[語法] vector::reserve()一問

看板C_and_CPP (C/C++)作者 (楊伯)時間16年前 (2010/05/04 22:03), 編輯推噓2(208)
留言10則, 5人參與, 最新討論串1/1
關於vector::reserve()小弟有一些疑問。 我在某個程式碼中看到類似這樣子的寫法 vector<char*> m_vBuff; m_vBuff.reserve(16); for(int i=0; i<16; ++i) m_vBuff[i] = NULL; 這樣子可以編的過。 可是我回家自己寫卻會發生溢位,那為什麼我之前在外面看到 那段卻可以跑@@。 額外問一下,如果上面那個真的有問題,那如果要像他那樣, 預留16個空間,真的要push_back進去16個空的嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.128.56

05/04 22:17, , 1F
....size和capacity是不一樣的 reserve不會動size
05/04 22:17, 1F

05/04 22:19, , 2F
嗯,這個我知道,所以我想知道上面那段CODE為什麼可以
05/04 22:19, 2F

05/04 22:19, , 3F
05/04 22:19, 3F

05/04 22:26, , 4F
1.可以compile不代表可以用 2.超出存取邊界不代表一定會
05/04 22:26, 4F

05/04 22:27, , 5F
access violation 3. vector 的operator[]沒有邊界檢查
05/04 22:27, 5F

05/04 22:48, , 6F
用vector::at()就會檢查, 還會丟例外
05/04 22:48, 6F

05/04 22:58, , 7F
我比較好奇編得過就代表程式沒問題的觀念是誰灌輸的。
05/04 22:58, 7F

05/04 23:04, , 8F
可能我用字不對,我看到的是編完後可以正確的執行,所
05/04 23:04, 8F

05/04 23:04, , 9F
以我才會有這樣子的問題
05/04 23:04, 9F

05/04 23:20, , 10F
看起來可以正常執行的錯誤最可怕了
05/04 23:20, 10F
文章代碼(AID): #1Bu2awZz (C_and_CPP)
文章代碼(AID): #1Bu2awZz (C_and_CPP)