다음 코드는 boost :: property_tree :: read_xml() 호출에서 seg 오류로 인해 충돌합니다. boost :: asio :: spawn()을 사용하여 생성 된 io_service 핸들러 내부에서 호출 된 경우에만 발생합니다. 처리기가 방금 게시되면 괜찮습니다. 해결 방법이 있습니까? 우리가 rapidxml 파서는 기본적으로 부스트 :: property_tree :: read_xml()에서 사용하기 때문에 독방 감금 오류가 코 루틴의 스택 오버 플로우로 인해 발생 것을 발견 뒷조사 후boost :: asi :: spawn을 사용하여 생성 된 asio 핸들러의 boost :: property_tree :: read_xml segfaults
#include <boost/asio/spawn.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
#include <sstream>
#include <thread>
void process()
{
std::cerr << "start"<< std::endl;
std::istringstream is("<t>1</t>");
boost::property_tree::ptree pt;
boost::property_tree::read_xml(is, pt); // <<< seg fault here
std::cerr << std::endl << "end" << std::endl;
}
int main()
{
boost::asio::io_service io_service;
boost::asio::spawn(io_service, [] (boost::asio::yield_context y){
process();
});
io_service.run();
return 0;
}