CUDD执行中的分段错误
在汇编时,我使用了:CUDD执行中的分段错误,c,segmentation-fault,bdd,cudd,C,Segmentation Fault,Bdd,Cudd,在汇编时,我使用了: 1) ./configure --enable-dddmp --enable-obj --enable-shared --enable-static; make 2) gcc test.c -o testprogram -I /path/to/cudd-3.0.0/cudd -I /path/to/cudd-3.0.0/util -I /path/to/cudd-3.0.0/ -static -L /path/to/cudd-3.0.0/cudd/.libs
1) ./configure --enable-dddmp --enable-obj --enable-shared --enable-static; make
2) gcc test.c -o testprogram -I /path/to/cudd-3.0.0/cudd -I /path/to/cudd-3.0.0/util -I /path/to/cudd-3.0.0/ -static -L /path/to/cudd-3.0.0/cudd/.libs/ -lcudd -lm
程序编译成功。我使用的是cudd3.0.0软件包。之后,我在执行过程中遇到了这个分段错误:
请建议执行此操作的正确方法,以及我为什么会出现此错误
我正在添加主要功能:
int main (int argc, char *argv[])
{
char filename[30];
DdManager *gbm; /* Global BDD manager. */
gbm = Cudd_Init(0,0,CUDD_UNIQUE_SLOTS,CUDD_CACHE_SLOTS,0); /* Initialize a new BDD manager. */
DdNode *bdd, *var, *tmp_neg, *tmp;
int i;
bdd = Cudd_ReadOne(gbm); /*Returns the logic one constant of the manager*/
Cudd_Ref(bdd); /*Increases the reference count of a node*/
for (i = 3; i >= 0; i--) {
var = Cudd_bddIthVar(gbm,i); /*Create a new BDD variable*/
tmp_neg = Cudd_Not(var); /*Perform NOT boolean operation*/
tmp = Cudd_bddAnd(gbm, tmp_neg, bdd); /*Perform AND boolean operation*/
Cudd_Ref(tmp);
Cudd_RecursiveDeref(gbm,bdd);
bdd = tmp;
}
bdd = Cudd_BddToAdd(gbm, bdd); /*Convert BDD to ADD for display purpose*/
print_dd (gbm, bdd, 2,4); /*Print the dd to standard output*/
sprintf(filename, "./bdd/graph.dot"); /*Write .dot filename to a string*/
write_dd(gbm, bdd, filename); /*Write the resulting cascade dd to a file*/
Cudd_Quit(gbm);
return 0;
}
是的,已经解决了。我没有在代码行的正确位置创建名为“bdd”的文件夹:
sprintf(filename, "./bdd/graph.dot");
现在,它正在执行。抱歉,我认为这是概念上的错误。请注意,丢失的文件夹永远不会导致错误。据我所见,您自己编写了函数“write_dd”(它不是CUDD的一部分,也不是您发布的代码的一部分),如果丢失的文件夹导致segfault,您很可能没有检查“fopen”调用的返回值(CUDD的转储函数获取一个文件*作为参数)。所以这个问题实际上与CUDD无关,只是我丢失的文件夹@DCTLIB您是否使用CUDD包创建了bdd文件?我正在创建BDD,并且可以查看它,但无法将其存储在BDD文件中@DCTLIB您正在使用DDDMP包来存储BDD?您似乎正在查看DDDMP的内部函数-可以在上查看使用的官方API-使用起来不太困难,但有点麻烦。但是,必须填充具有可变感兴趣索引的数组。确保解释返回值。在google上搜索使用Dddmp_cuddBddStore函数的示例。