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

Seg fault while creating an array of Z3_ast from Z3_ast_vector

基本上,我想对许多 expr 进行 OR(多次)。我最终创建了那些 expr 的向量,并从向量创建了一个数组,然后使用 Z3_mk_or。但是代码抛出段错误。

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);
}

此外,这是解决我的问题的正确方法吗?难道没有更简单的 API 调用 OR 许多 bool 常量吗?

你能试试辅助功能吗:

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

中提供的功能