【问题标题】:Freeing SCIP_SOL* and SCIP* in SCIP optimization software在 SCIP 优化软件中释放 SCIP_SOL* 和 SCIP*
【发布时间】:2019-12-15 22:41:39
【问题描述】:

我初始化scip环境如下:

SCIP* scip = nullptr;
SCIP_CALL( SCIPcreate(&scip) );

我创建了一个小问题来学习 SCIP,我将解决方案存储在

SCIP_SOL* sol = nullptr;
sol = SCIPgetBestSol(scip);

我正在尝试通过solscip 释放内存,但我遇到了分段错误。

这会导致段错误:

SCIP_RETCODE retcode =  SCIPfreeSol(scip,&sol);
assert(retcode == SCIP_OKAY);


retcode = SCIPfree(&scip);
assert(retcode == SCIP_OKAY);

如果我在释放scip 之前没有释放sol,它可以正常工作并且不会发生段错误,但我确信它不正确。我检查了 SCIP 优化套件附带的一些其他代码,一些代码示例使用 SCIPfreeSol 而有些则没有,即使它们都使用 SCIP_SOL *sol 来定义 sol 变量。

编辑:这个问题确实有效。我没有包含实际的模型代码。

【问题讨论】:

    标签: linear-programming scip


    【解决方案1】:

    如果您的解决方案是由SCIPcreateSol 或类似机构创建的,您只需释放它。当您通过SCIPgetBestSol(scip) 寻求最佳解决方案时,这只会返回一个指向 SCIP 内部创建的解决方案的指针。 SCIP 也将释放它,因此您不必自己执行此操作。同时,由于它不是您“自己的”解决方案,因此您不应修改此解决方案。如果你想这样做,你应该创建你自己的或者通过SCIPcreateSolCopy复制最好的。

    因此,在您的示例中,仅释放 scip 是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多