Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Cudd_BDD零节点参考值_C++_C_Binary Decision Diagram_Cudd - Fatal编程技术网

C++ Cudd_BDD零节点参考值

C++ Cudd_BDD零节点参考值,c++,c,binary-decision-diagram,cudd,C++,C,Binary Decision Diagram,Cudd,我正在使用Cudd软件包 首先,我得到一个错误状态“dead count!=deleted”,所以我开始调试,遇到了一个我无法理解的问题 下面的代码接受一个十进制值作为输入,它应该使用nodes_向量中的变量将相应的BDD返回到此十进制值 DdNode * convert_decimal_to_BDD(unsigned int decimal_value, DdManager * manager, vector<DdNode *> nodes_vector){ DdNode * t

我正在使用Cudd软件包 首先,我得到一个错误状态“dead count!=deleted”,所以我开始调试,遇到了一个我无法理解的问题

下面的代码接受一个十进制值作为输入,它应该使用nodes_向量中的变量将相应的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;
} 
DdNode*将十进制转换为BDD(无符号整数十进制值,DdManager*管理器,向量节点,向量){
DdNode*tmp3;
int nodes_vector_size=nodes_vector.size();
向量二进制=获取二进制表示(十进制值、节点向量大小);
DdNode*result=Cudd_ReadOne(管理器);
Cudd_Ref(结果);
对于(int i=0;iref%hu\n”,tmp3->ref);
Cudd_RecursiveDeref(经理、结果);
结果=tmp3;
printf(“将十进制转换为BDD:result->ref%hu\n”,result->ref);
}
printf(“NFAOBDD::将十进制转换为十进制:结果->参考%hu\n”,结果->参考);
返回结果;
} 
在某些情况下,我得到的结果节点和tmp3节点的参考值等于零,但我不明白在调用“Cudd_ref(tmp3)”后怎么会发生这种情况


我希望能对此做出任何解释,为什么我可以在循环中得到“dead count!=deleted”错误,尽管我在该循环的第一次迭代中没有得到“dead count!=deleted”错误。

当您编写“nodes_vector[I]”时,您的意思是获取第I个变量,对吗?通常我是这样做的:DdNode*var=Cudd_bddIthVar(manager,I);一些注释(应该仍然相关):当您的函数“convert_decimal_to_BDD”返回时,结果已经是Ref'd了。如果您在从上面调用函数的过程中也Cudd_ref您的结果,那么您是双重引用,这可能会导致死计数问题。然后,将Bool与“1”进行比较:“if(binary[i]==1)”。不要这样做。最后,当内存不足时,可能会出现“tmp3==NULL”:使用更高的最大内存余量初始化CUDD管理器,以避免出现这种情况和/或启用动态重新排序。