Получил исключение при десериализации XML-данных

#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) (обратите внимание, что они используют разные версии библиотек дезинфицирующих средств).