Кто-нибудь знает, почему я не могу просто загрузить указатель на выражение z3 в свою память, а затем снова запросить его позже? Когда я это делаю, я получаю контекстные ошибки и говорится, что не следует сравнивать эти выражения. Когда я переключаю *ноль, используя только z, все работает нормально.
Я использую clang версии 15.0.7 в качестве компилятора.
llvm::DenseMap map_end_address;
z3::expr x = context->bv_const("x", 32);
z3::expr y = context->bv_const("y", 32);
z3::expr z = context->bv_const("z", 32);
map_end_address->insert({llvm::dyn_cast(mallocCallInstruction), &z});
z3::expr *zero = map_end_address->lookup(llvm::dyn_cast(mallocCallInstruction));
solver->add(x == 4);
solver->add(y == 2);
solver->add(*zero == z3::shl(x, y));
Это решается с помощью общих_указателей, но я действительно не понимаю, почему эти ресурсы уже будут освобождены, если я просто запишу указатель на этот объект в память.llvm::DenseMap map_end_address;
z3::expr x = context->bv_const("x", 32);
z3::expr y = context->bv_const("y", 32);
std::shared_ptr z = std::make_shared(context->bv_const("z", 32));
map_end_address.insert({llvm::dyn_cast(mallocCallInstruction), z});
z3::expr *zero = map_end_address.lookup(llvm::dyn_cast(mallocCallInstruction)).get();
solver->add(x == 4);
solver->add(y == 2);
solver->add(*zero == z3::shl(x, y));
Подробнее здесь: https://stackoverflow.com/questions/791 ... -of-memory