Ошибка контекста решателя 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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