基本上,我想要多次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调用?
答案 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