作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] 關於_one與_zero
時間Fri Jan 5 00:22:04 2007
※ 引述《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