欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

boost解析json觸發了一個斷點

阮建安2年前9瀏覽0評論

最近在使用C++中的boost庫解析JSON時,突然遇到了一個奇怪的問題,每次解析JSON都會觸發一個斷點。

//代碼片段
boost::property_tree::ptree pt;
boost::property_tree::read_json(jsonString, pt);

經過仔細排查,發現問題出在了read_json函數上。

//read_json函數定義
templateinline void read_json(std::basic_istream&stream, Ptree &pt, const read_json_options &options = read_json_options())
{
basic_parserparser(pt, options);
parser.parse(stream);
}

通過查看read_json函數的源碼,發現它是通過調用basic_parser類的parse函數來解析JSON的。于是我們來看一下basic_parser類的定義。

//basic_parser類定義片段
templateclass basic_parser
{
public:
basic_parser(Ptree &pt): self_(pt) {}
void parse(std::basic_istream&stream);
private:
Ptree &self_;
//...
};

在basic_parser類的定義中,我們可以看到parse函數的實現,參數為std::basic_istream類型,這個類型與我們的jsonString值相同,這也就說明了為什么我們的jsonString能夠被解析。但是由于basic_parser函數的實現不夠健壯,而且我們并沒有將參數傳遞給它。

解決這個問題非常簡單,只需要在read_json函數中將jsonString的值傳遞給basic_parser類的parse函數即可。

//解決方案
boost::property_tree::ptree pt;
boost::property_tree::basic_parserparser(pt);
parser.parse(std::basic_istringstream(jsonString));

經過這一修改,程序不再觸發斷點而是正常運行了。