从Z3_ast_vector创建Z3_ast数组时出现段错误

时间:2016-07-01 12:09:19

标签: z3

基本上,我想要多次expr次(或多次)。我最终创建了一个expr s的向量,并从向量中创建一个数组,然后使用Z3_mk_or。但代码抛出了seg错误。

expr x = c.bool_const("x");
expr y = c.bool_const("y");
expr z = c.bool_const("z");    
int s=0;
int size;
Z3_ast* args;
Z3_ast_vector vec;
while(s < 2) 
{
    Z3_ast_vector_push(c, vec, x);
    Z3_ast_vector_push(c, vec, y);
    Z3_ast_vector_push(c, vec, z);
    std::cout << "size: " << Z3_ast_vector_size(c, vec) << "\n";
    size = Z3_ast_vector_size(c, vec);
    args = new Z3_ast[size];
    for(int i=0; i<size; ++i)
    {
      args[i] = Z3_ast_vector_get(c, vec, i);
    }

    expr r = to_expr(c, Z3_mk_or(c, size, args));
    s++;
    Z3_ast_vector_resize(c, vec, 0);
}

此外,这是解决我的问题的正确方法。是不是对OR许多bool consts进行了更简单的API调用?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用辅助功能:

inline expr or(expr_vector const& args) { 
    array<Z3_ast> _args(args);
    Z3_ast r = Z3_mk_or(args.ctx(), _args.size(), _args.ptr());
    args.check_error();
    return expr(args.ctx(), r);
}

为方便起见,我会添加它,但是使用C API中的函数非常容易出错,因此最好坚持使用z3 ++中提供的工具.h