#c #boost #c 17
#c #повышение #c 17
Вопрос:
Я получил это исключение: «libc abi.dylib: завершается с неперехваченным исключением типа boost::archive ::archive_exception: ошибка входного потока — нет такого процесса, завершающегося с неперехваченным исключением типа boost::archive ::archive_exception: ошибка входного потока — нет такого процесса (lldb) « в моемпрограмма при десериализации из xml-файла.
Моя программа :
#include<iostream>
#include<fstream>
#include<boost/archive/xml_oarchive.hpp>
#include<boost/archive/xml_iarchive.hpp>
int main(){
std::string fname = "file.xml";
{
std::string a("hello world");
std::ofstream of(fname.c_str());
boost::archive::xml_oarchive of_xml(of);
of_xml << BOOST_SERIALIZATION_NVP(a);
of.close();
}
{
std::string b;
std::ifstream inf(fname.c_str());
boost::archive::xml_iarchive inf_xml(inf);
inf_xml >> BOOST_SERIALIZATION_NVP(b);
inf.close();
std::cout<<"string is : "<<b<<"n";
}
return 0;
}
Как справиться с этим исключением, ребята?
Комментарии:
1. В какой строке приведенного выше кода вы получили исключение? Вы обрабатываете исключение с помощью try / catch? В чем проблема с этим?
2. строка » inf_xml >> BOOST_SERIALIZATION_NVP (b); » выдает исключение, и когда я использую блокировку try-catch, исключение не перехватывается блоком, я использую Xcode и не знаю, почему он выдает мне эту ошибку
3. Не связано: вам не нужно
.c_str()
при открытии файловых потоков — и файловые потоки будут автоматически закрыты, когда они выйдут за пределы области видимости.4. С помощью этой слегка измененной программы , которую я скомпилировал с помощью clang , я получаю этот вывод AddressSanitizer. Если я скомпилирую с помощью g , похоже, что работает та же программа. Я начал запускать версию g в valgrind, но она просто продолжает работать… Это продолжается уже более 30 минут.
5. @TedLyngmo интересно, что с g 10 и clang 9 (включен asan / ubsan) он отлично работает на моем компьютере (boost 1.74.0) (обратите внимание, что они используют разные версии библиотек дезинфицирующих средств).