我在Linux上使用Z3 4.1 C-API。我想为求解器指定一个超时。
我正在使用以下命令,但是在命令Z3_solver_set_params()中出现分段错误。
Z3_context ctx = mk_context();
Z3_solver s = Z3_mk_solver(ctx);
Z3_params params = Z3_mk_params(ctx);
Z3_symbol r = Z3_mk_string_symbol(ctx, ":timeout");
Z3_params_set_uint(ctx, params, r, static_cast<unsigned>(10));
Z3_solver_set_params(ctx, s, params);
Run Code Online (Sandbox Code Playgroud)
看来我没有正确使用API。
我在包含示例的test_capi.c文件中找不到用于C-API设置求解器超时的任何示例。有人可以帮忙吗?
小智 5
在执行其他任何操作之前,您需要增加求解器和参数上的引用计数。这是将要通过的摘录。
Z3_config cfg = Z3_mk_config();
Z3_context ctx = Z3_mk_context(cfg);
Z3_solver s = Z3_mk_solver(ctx);
Z3_solver_inc_ref(ctx, s);
{
Z3_params params = Z3_mk_params(ctx);
Z3_params_inc_ref(ctx, params);
{
Z3_symbol r = Z3_mk_string_symbol(ctx, ":timeout");
Z3_params_set_uint(ctx, params, r, 10);
Z3_solver_set_params(ctx, s, params);
Z3_params_dec_ref(ctx, params);
}
}
Z3_solver_dec_ref(ctx, s);
Z3_del_config(cfg);
Z3_del_context(ctx);
Run Code Online (Sandbox Code Playgroud)