精華區beta EE_DSnP 關於我們 聯絡資訊
※ 引述《scxz (tears and rain)》之銘言: : 抱歉打擾了 不用客氣 :) : 我有的問題是 : 在BddManager的constructor中 : 會call到init()然後會跑過這兩行 : BddNode::_one = BddNode(BddNodeInt::_terminal, BDD_POS_EDGE); : BddNode::_zero = BddNode(BddNodeInt::_terminal, BDD_NEG_EDGE); : 但_one一開始_nodeV是空的 : 所以=的overload中相對應的BddNodeInt的_refcount是不是就不用--了呢? 是的, 增減 _refCount 時請注意 _nodeV != 0, 否則會 crash!! : 此外在test.cpp中 : 我想辦法cout了_one與_zero這兩個static的data member : 結果為 : zero: : [0](+) 0x9d13cc0 : ==> Total #BddNodes : 1 : one: : [0](+) 0x9d13cc0 : ==> Total #BddNodes : 1 : 可是 : BddNode的constructor不是 : BddNode::BddNode(BddNodeInt* n, BDD_EDGE_FLAG f) : { : assert(n != 0); : _nodeV = size_t(n) + f; : n->incRefCount(); : } : 且BddNode::print是 : BddNode::print(ostream& os, size_t indent, size_t& nNodes) const : { : for (size_t i = 0; i < indent; ++i) : os << ' '; : BddNodeInt* n = getBddNodeInt(); : os << '[' << getLevel() << "](" << (isNegEdge()? '-' : '+') << ") "; : ... : 可是cout的結果_zero與_one的Edge都是(+) : 不是應該是一個(+)一個(-)才對嗎 : 觀念不知道沒有想錯otz 那表示你寫錯了... 試著用 "step" 去 debug 一下... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.129.139
timrau:是(_nodeV & (~1)) != 0吧?不然會輪到_zero crash? 01/05 01:03
ric2k1:Oh, 對, 或者是用 getBddNodeInt() != 0... 01/05 01:37