作者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