Z3 C-API用于求解器超时

时间:2012-08-30 15:04:28

标签: z3

我在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);     

我似乎没有正确使用API 我找不到任何C-API的示例来在包含示例的test_capi.c文件中设置解算器超时。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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);