首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Cudd访问冲突读取位置

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

Stack Overflow用户
提问于 2013-10-10 08:24:59
回答 1查看 106关注 0票数 1

我正在尝试使用Cudd包在Visual中实现一个算法。我必须递归地使用函数。但是它总是在一个特定的行上抛出一个错误。错误是访问冲突读取位置0x00594a5ct。而且它正在反对temp_bdd_result.的使用。我无法弄清楚为什么会发生这种情况,因为temp_ bdd_result _node和bdd_result中使用的两个值都包含值。那么,为什么他们无法进入。或者这个错误指向了一些我看不到的东西。请帮帮忙。

代码语言:javascript
复制
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);
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 11:23:07

Cudd_RecursiveDeref()递归地删除一个节点及其所有子节点。因此,每当bdd_node使用Cudd_RecursiveDeref()解除引用时,bdd_result也会被移除,其值也不会由函数返回。因此,要保留返回的值,使用Cudd_Deref()代替。它只是在不删除子节点的情况下减少引用计数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19290660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档