expr替换分段错误'类型错误'

时间:2016-11-10 13:05:21

标签: c++ z3

我使用z3 c ++ api。我在expr_vector1中从exprs创建一个副本并将它们存储在新的expr_vector2中,然后调用

        for(unsigned j = 0; j < exprs_vector1.size();++j){
            expr v = exprs_vector1[j];
            uint32_t size; // it is initialized somehow.

            std::stringstream name;
            name << v <<"_"<< i;
            expr var(ctx);
            if(v.is_bool())
                var = sctx->ctx.bool_const(name.str().c_str());
            else if(v.is_bv())
                var = sctx->ctx.bv_const(name.str().c_str(), size);
            exprs_vector2.push_back(var);

            }    
       formula.substitute( expr_vactor1, expr_vector2); // this line causes error

但是我收到消息“类型错误”的z3异常。 请注意,这两个向量具有相同的大小,并且它们的表达式相应地具有相同的排序,并且exprs是bool或bitvector的一种。我猜不出这件事的原因。 vector1的内容:

|!POPCNT :: I 0 @ 1#1_1 |

在vector2中我们有:

| \ |!POPCNT :: I 0 @ 1#1_1 \ | _1 |

以上两个表达式都是bitvector32。

该公式没有expr_vector1的任何表达式,这可能是此异常的原因吗?

0 个答案:

没有答案