2

我正在使用 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)”后怎么会发生这种情况

我将不胜感激对此的任何解释,以及为什么我会在循环中得到“死计数!=已删除”错误,尽管在该循环的第一次迭代中我没有收到“死计数!=已删除”错误。

4

0 回答 0