作者Peter034 (Peter)
看板EE_DSnP
標題Re: [問題] 怪異的crash
時間Fri Jun 19 14:32:11 2009
我在寫bddNode operator &的時候
return _BddMgr->ite(*this,n,_zero);
然後在ite裡面當要讀取 _zero的Level的時候就crash了
但是_zero應該在一開始bddMgr::init()的時候就有指到東西了
也檢查過 uniquify(0,0,0) 的時候也有把bddMgr::terminal建立起來
我猜可能是這個constructor有問題
BddNode::BddNode(BddNodeInt* n, BDD_EDGE_FLAG f)
{
assert(n != 0);
// TODO
_nodeV = size_t(n) + f;
n->incRefCount();
}
因為剛建完 BddNode::_one = BddNode(BddNodeInt::_terminal, BDD_POS_EDGE);
嘗直接呼叫 _one.getLevel() 就會crash 囧
不過還是不知道該怎麼處理...
還是問題出在其他地方...?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.174.178
※ 編輯: Peter034 來自: 140.112.174.178 (06/19 16:11)
1F:推 ric2k1:有可能是你的 Hash 的問題... 確定有 new 出一個BddNodeInt 06/19 21:49
2F:→ ric2k1:給 _terminal 嗎? 06/19 21:49
3F:→ Peter034:有 我在BddNodeInt::_terminal = uniquify(0, 0, 0);之後 06/19 23:45
4F:→ Peter034:測試 cout<<BddNodeInt::_terminal->getLevel() 06/19 23:46
5F:→ Peter034:以及 BddNodeInt::_terminal->getRefCount() 都能得到0 06/19 23:47
6F:推 ric2k1:那可以在 debugger 裡 display BddNodeInt::_terminal 06/19 23:51
7F:→ ric2k1:然後 step/next 看看是在哪裡被 corrupted 掉的... 06/19 23:51
8F:→ Peter034:謝謝老師 我再努力研究一下 06/20 00:42
9F:→ Peter034:發現癥結所在了 operator"="裡面有判斷式寫錯了!! 06/20 01:05
10F:推 ric2k1:XD good news... 06/20 01:08
11F:→ Peter034:真是非常感謝老師! 06/20 14:20