[問題] 使用vector的push_back出現glibc錯誤訊息
我自訂了一class 叫做TypeA
示意如下
class TypeA
{
public:
TypeA(){};
~TypeA(){};
TypeA* pre;
vector<int> cells;
};
void functionA(...)
{
if(c->pre!=&REF) //我有宣告global的TypeA REF;
functionB(c->pre,c); //之後第一次建立TypeA的物件時, pre=&REF
//第一次過,pre=&(前一次的物件)
}
void functionB(TypeA* a1,TypeA* a2)
{
cout << a1->cells.size()<<endl; //印出a1的cells個數
cout << a2->cells.size()<<endl; //印出a2的cells個數
int i = 0;
for(i=0;i<a1->cells.size();i++) //印出a1的cells內容
{
cout << a1->cells[i]<<endl;
}
for(i=0;i<a2->cells.size();i++) //印出a2的cells內容
{
cout << a2->cells[i]<<endl;
}
//以上的數值印出來都是正確的
for(i=0;i<a2->cells.size();i++)
{
a1->cells.push_back(a2->cells[i]); //執行到這行時出現了錯誤訊息[註1]
}
}
[註1]
*** glibc detected *** ./main.o: double free or corruption(fasttop): 0x00....
去google了很久glibc常見於已經不在的空間如果又被delete
就會被"double free"[重複釋放]
有另一說是glibc的版本問題....
另外有看到說vector的push_back是先破壞再建立的作法
所以其實也是會有釋放空間的動作
最讓我疑惑的是 如果cells的數值與空間大小都印的出來
那這個空間到底還存不存在呢? 還是他只是殘留著 只是剛好被印到而已?
不曉得這樣的表達方式夠不夠清楚 如果有說不清楚的地方 請告訴我 謝謝QQ
被這個問題困擾好幾天了....嗚....
開發平台: (例: g++, Linux)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.187.104
※ 編輯: gppo 來自: 140.116.187.104 (12/20 17:53)
→
12/20 18:16, , 1F
12/20 18:16, 1F
→
12/20 18:16, , 2F
12/20 18:16, 2F
→
12/20 18:19, , 3F
12/20 18:19, 3F
→
12/20 18:26, , 4F
12/20 18:26, 4F
→
12/20 18:35, , 5F
12/20 18:35, 5F
→
12/20 18:59, , 6F
12/20 18:59, 6F
→
12/20 18:59, , 7F
12/20 18:59, 7F
→
12/20 19:00, , 8F
12/20 19:00, 8F
→
12/20 19:00, , 9F
12/20 19:00, 9F
→
12/20 19:31, , 10F
12/20 19:31, 10F
→
12/20 19:32, , 11F
12/20 19:32, 11F
→
12/20 19:34, , 12F
12/20 19:34, 12F
→
12/20 19:35, , 13F
12/20 19:35, 13F
→
12/20 20:46, , 14F
12/20 20:46, 14F
→
12/20 20:46, , 15F
12/20 20:46, 15F
→
12/20 20:47, , 16F
12/20 20:47, 16F
→
12/20 20:47, , 17F
12/20 20:47, 17F
→
12/20 21:00, , 18F
12/20 21:00, 18F
→
12/20 21:10, , 19F
12/20 21:10, 19F
→
12/20 21:11, , 20F
12/20 21:11, 20F
→
12/20 21:11, , 21F
12/20 21:11, 21F
→
12/20 22:11, , 22F
12/20 22:11, 22F
→
12/20 22:12, , 23F
12/20 22:12, 23F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章