使用Cudd的访问冲突读取位置

莫希特·贾恩(Mohit Jain)

我正在尝试使用Cudd包在Visual C中实现算法。我必须递归使用一个函数。但是它总是在某一行上抛出错误。错误是访问冲突读取位置0x00594a5ct而且这与temp_bdd_result的用法背道而驰我无法弄清楚为什么会发生这种情况,因为temp_bdd_result-bdd_node和bdd_result中使用的两个值都包含值。那么为什么它们无法访问。或此错误指向我看不到的其他内容。请帮忙。

DdNode* Path_Function_Construct(DdManager *manager,int matrix[3][3],int source)
{
DdNode *bdd_node,*bdd_result,*e,*temp_bdd_node,*temp_bdd_result;
if (source>=rows)
    return Cudd_ReadOne(manager);
else
{
    bdd_result=Cudd_ReadZero(manager);
    Cudd_Ref(bdd_result);
    for (int j=0;j<columns;j++)
    {
    if (matrix[source][j]==1)
    {
            //Declaring temp variables 

            //This means that an edge exists between source and node in consideration
            e=Cudd_bddNewVar(manager);
            Cudd_Ref(e);

            //Removing redundant nodes
            int new_matrix[3][3];
            for(int l=0;l<rows;l++)
                for(int m=0;m<columns;m++)
                    new_matrix[l][m]=matrix[l][m];
            for(int i=0;i<rows;i++)
                new_matrix[i][j]=0;

            //find path function using that node as a source
            temp_bdd_node=Path_Function_Construct(manager,new_matrix,j+1);

            Cudd_Ref(temp_bdd_node);
            bdd_node=Cudd_bddAnd(manager,e,temp_bdd_node);
            Cudd_Ref(bdd_node);
            temp_bdd_result=Cudd_bddIthVar(manager,4);
            temp_bdd_result=Cudd_bddAnd(manager,bdd_result,bdd_node); //this is where error is coming
            Cudd_Ref(temp_bdd_result);
            Cudd_RecursiveDeref(manager,bdd_result);
            bdd_result=temp_bdd_result;
            Cudd_Ref(bdd_result);
            Cudd_RecursiveDeref(manager,temp_bdd_node);
            Cudd_RecursiveDeref(manager,temp_bdd_result);
            Cudd_RecursiveDeref(manager,bdd_node);
            Cudd_RecursiveDeref(manager,e);
        } // end of if (matrix[source][j]==1)
    }// end of for loop
    return (bdd_result);
}
}
莫希特·贾恩(Mohit Jain)

Cudd_RecursiveDeref()递归删除节点及其所有子节点。因此,每当使用Cudd_RecursiveDeref()取消对bdd_node的引用时,bdd_result也会被删除,并且函数未返回其值。因此,要保留返回值,请改用Cudd_Deref()。它只是减少了引用计数,而没有删除其子节点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问冲突读取位置0x000000004

来自分类Dev

重新分配内存访问冲突读取位置

来自分类Dev

CreateBuffer抛出“访问冲突读取位置”

来自分类Dev

使用openSceneGraph访问冲突写入位置

来自分类Dev

c ++向量插入访问冲突读取位置

来自分类Dev

异常错误:访问冲突读取位置0xDDDDDDDD

来自分类Dev

C中的访问冲突读取位置0x00000000

来自分类Dev

访问冲突读取位置0xFFFFFFFFFFFFFFFFFF

来自分类Dev

访问冲突读取位置0xCDCDCDCD

来自分类Dev

多线程访问冲突读取位置C ++

来自分类Dev

访问冲突读取位置fprintf

来自分类Dev

例外:“访问冲突读取位置”

来自分类Dev

使类可迭代:访问冲突读取位置

来自分类Dev

C ++ CImg访问冲突读取位置

来自分类Dev

如何在此代码中修复“访问冲突读取位置”

来自分类Dev

使用对象指针时的访问冲突读取

来自分类Dev

#define导致“访问冲突读取位置”

来自分类Dev

未处理的异常:访问冲突读取位置

来自分类Dev

CreateBuffer抛出“访问冲突读取位置”

来自分类Dev

AVL树插入-访问冲突读取位置(无法读取内存)

来自分类Dev

使用openSceneGraph访问冲突写入位置

来自分类Dev

使用refprop.dll调用的访问冲突读取位置处的未处理异常

来自分类Dev

访问冲突读取位置0xCDCDCDCD

来自分类Dev

多线程访问冲突读取位置C ++

来自分类Dev

访问冲突读取位置0x00000014。使用流

来自分类Dev

访问冲突读取位置fprintf

来自分类Dev

C++访问冲突读取位置错误

来自分类Dev

使用向量的函数崩溃,调试器显示访问冲突读取位置

来自分类Dev

vc++访问冲突读取位置