Re: [問題] 使用vector的push_back出現glibc錯誤訊息

看板C_and_CPP (C/C++)作者 (香蕉是什麼?)時間16年前 (2009/12/22 18:53), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串2/3 (看更多)
找到錯誤的原因了 寫了一段簡短的code做說明 #include <cstdlib> #include <iostream> #include <vector.h> using namespace std; class TypeA { public: TypeA( ) {cout << "-----build TypeA-----"<<endl; } ~TypeA() {cout << "-----delete TypeA-----"<<endl; } vector<int> cells; }; int main(int argc,char **argv) { TypeA A; A.cells.push_back(5); cout << "The address of cells:"<<(&A.cells[0])<<endl; A.cells.push_back(4); cout << "The address of cells:"<<(&A.cells[0])<<endl; return 0; } Output: -----build TypeA----- The address of cells:0x33cf0 The address of cells:0x33d70 -----delete TypeA----- 從結果可以看出 push_back後 同樣都是vector的第一個element 他的位址是會改變的 如果是先把位址記下來 接下來作push_back 再傳先前記下來的位址給function操作 可能就會對一個空掉的位址做動作 因此會出現segmentation fault或是glibc的錯誤訊息 因為是第一次寫STL的code 沒注意到push_back會有這樣的影響... 請問如果要解決這個問題 有沒有比較好的作法呢? 我現在只想到另外記cells的index值 再用cells[index]去做存取 另外 使用vector時 element要怎麼知道自己是第幾個element呢? 以上是我的心得 如果有錯請指正 我會非常感謝的!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.187.104

12/22 20:07, , 1F
不知道vector內部的實作本來就不該隨便取址的
12/22 20:07, 1F

12/22 20:20, , 2F
vector有可能會把空間 double, 重新 alloc ?
12/22 20:20, 2F
文章代碼(AID): #1BCAKM-- (C_and_CPP)
文章代碼(AID): #1BCAKM-- (C_and_CPP)