PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
EE_DSnP
[問題] 為什麼這樣不會segmentation fault
作者:
XDucka
(Duck)
2012-12-29 20:57:51
就是我在寫sweep的時候發現我delete明明寫在cout的前一行
但是居然沒有segmentation fault=.= 是我沒有delete乾淨嗎@@?
但是我印出原本的gate的位置跟我要delete的gate的位置是一樣的QQ
這是什麼巫術Q_Q
int main(){
GateList g;
g.reserve(10);
for (size_t i = 0; i < 10; ++i) {
g[i]=new AigGate(i,i);
cout<<g[i]<<"\n";
}
set<CirGate*> a;
for (size_t i = 0; i < 10; ++i) {a.insert(g[i]);}
for (set<CirGate*>::iterator li = a.begin(); li != a.end(); ++li) {
cout<<(*li);
delete (*li);
cout<<"<"<<(*li)->getGateId()<<">\n";
}
}
好奇怪@@!
作者: gamerred (game859)
2012-02-29 21:12:00
如果是使用new/malloc要到的記憶體都是放在heap裡所以雖然你非法讀取 但都是同一個segment如果記憶體放不同page 作業系統才可能抓到錯誤不然通常作業系統不幫你抓這種錯 成本太高了即使幫你抓 這也不是segmentation fault只能算illegal memory access
作者: simpdanny (辛普丹尼)
2012-02-29 21:17:00
XDDD樓上的解答根本是系統工程師的標準解了
作者:
XDucka
(Duck)
2012-02-29 21:19:00
感謝Gred大神 <(_ _)>
作者: gamerred (game859)
2012-02-29 21:20:00
其實還是可能出現segmentation fault那就是你把記憶體還回去之後 那塊記憶體內容又被改掉這時候對他解參照 如果解完之後又有用到指標那麼那個指標就有可能指到別的segment 這時候就有了
作者:
ric2k1
(Ric)
2012-02-29 21:50:00
呵呵,這個在 lecture note #7, p6 也有教過哦!
作者:
yan12125
(姥姥)
0000-00-00 00:00:00
valgrind可以抓這種錯誤喔,有時比gdb+cout好用!
作者:
boiq
(olo)
0000-00-00 00:00:00
有時候會可以cout但是卻是垃圾...像這樣
" target="_blank" rel="nofollow">
作者:
yan12125
(姥姥)
0000-00-00 00:00:00
樓上連結上不去...
作者: Nien1027 (隨便)
0000-00-00 00:00:00
感覺用delete只是單純把記憶體還回去,並不會真的清掉裡面的東西
繼續閱讀
[情報] HW#5 grades
ric2k1
[公告] Final Project Updates
ric2k1
[問題] final的make問題
waltersun
[情報] Final project slides (FRAIG)
ric2k1
[討論] Hash裡的replaceInsert()和forceInsert()
ric2k1
[問題] Strash結果不一樣
yan12125
[問題] 重複cirsim
ypf791
[情報] HW#4 grades
ric2k1
[問題] optimization更新DFSlist 頻率
stanleysu
Re: [情報] 產生 aag file 的圖檔
yan12125
Links
booklink
Contact Us: admin [ a t ] ucptt.com