我正在使用 Cudd 包http://vlsi.colorado.edu/~fabio/CUDD/ 首先我得到一个错误状态“死计数!=删除”所以我开始调试,我遇到了一个我无法理解的问题。
以下代码将一个十进制值作为输入,它应该使用 nodes_vector 中的变量将相应的 BDD 返回到该十进制值。
DdNode * convert_decimal_to_BDD(unsigned int decimal_value, DdManager * manager, vector<DdNode *> nodes_vector){
DdNode * tmp3;
int nodes_vector_size = nodes_vector.size();
vector<bool> binary = get_binary_representation(decimal_value, nodes_vector_size);
DdNode * result = Cudd_ReadOne(manager);
Cudd_Ref(result);
for (int i = 0; i < nodes_vector_size; i++){
if(binary[i] == 1){
tmp3 = Cudd_bddAnd(manager,result,nodes_vector[i]);
}
else{
tmp3 = Cudd_bddAnd(manager,result,Cudd_Not(nodes_vector[i]));
}
if(tmp3 == NULL){
printf("convert_decimal_to_BDD: Error 1\n");
exit(1);
}
Cudd_Ref(tmp3);
printf("convert_decimal_to_BDD: tmp->ref %hu\n", tmp3->ref);
Cudd_RecursiveDeref(manager,result);
result = tmp3;
printf("convert_decimal_to_BDD: result->ref %hu\n", result->ref);
}
printf("NFAOBDD::convert_decimal_to_BDD: result->ref %hu\n", result->ref);
return result;
}
在某些情况下,我得到结果节点和 tmp3 节点的参考值为零,但我不明白在我调用“Cudd_ref(tmp3)”后怎么会发生这种情况
我将不胜感激对此的任何解释,以及为什么我会在循环中得到“死计数!=已删除”错误,尽管在该循环的第一次迭代中我没有收到“死计数!=已删除”错误。