Ошибка контекста решателя Z3 при загрузке выражений из памятиC++

Программы на C++. Форум разработчиков
Anonymous
Ошибка контекста решателя Z3 при загрузке выражений из памяти

Сообщение Anonymous »

Кто-нибудь знает, почему я не могу просто загрузить указатель на выражение 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

Вернуться в «C++»