我按如下方式初始化了scip环境:
SCIP* scip = nullptr;
SCIP_CALL( SCIPcreate(&scip) );我创建了一个小问题来学习SCIP,我将解决方案存储在
SCIP_SOL* sol = nullptr;
sol = SCIPgetBestSol(scip);我试图通过sol和scip来释放内存,但是我遇到了分段错误。
这会导致segfault:
SCIP_RETCODE retcode = SCIPfreeSol(scip,&sol);
assert(retcode == SCIP_OKAY);
retcode = SCIPfree(&scip);
assert(retcode == SCIP_OKAY);如果我没有在释放scip之前释放sol,它工作得很好,没有出现seg错误,但我确信它是不正确的。我已经检查了SCIP优化套件附带的一些其他代码,一些代码示例使用SCIPfreeSol,一些不使用,尽管它们都使用SCIP_SOL *sol来定义sol变量。
编辑:这个问题实际上是可行的。我没有包含实际的模型代码。
发布于 2019-12-16 06:52:24
如果解决方案是由SCIPcreateSol或类似工具创建的,则只需释放该解决方案。当您通过SCIPgetBestSol(scip)请求最佳解决方案时,这只会返回一个指向SCIP内部创建的解决方案的指针。SCIP也会释放它,所以你不必自己做这件事。同时,由于它不是您自己的解决方案,因此您不应该修改此解决方案。如果你想这样做,你应该创建你自己的或者通过SCIPcreateSolCopy复制最好的。
因此,在您的示例中只释放scip是正确的。
https://stackoverflow.com/questions/59348706
复制相似问题