[英]OpenCV imread(filename) fails in debug mode when using release libraries
[英]Rapid JSON fails to parse in debug mode, but not release
下面是最初將數據寫入 JSON 文件的 function:
template<typename Writer>
inline void ToJSON(Writer& writer) {
writer.StartObject();
writer.String("msg_type");
writer.Int(type);
writer.String("msg");
writer.String(msg.c_str());
writer.EndObject();
}
然后這個消息被這個 function 解析:
static SvrMessage FromJSON(const char* json)
{
rapidjson::Document d;
qDebug() << json;
if (d.Parse<0>(json).HasParseError()) throw std::exception("Unable to parse message");
auto type = static_cast<SvrMessage::msg_type>(d["msg_type"].GetInt());
auto msg = d["msg"].GetString();
return SvrMessage(type, msg);
};
當我在發布模式下運行程序時,一切正常並且消息被正確解析。 但是,在調試模式下,以下行會拋出錯誤,因為它無法解析消息。
if (d.Parse<0>(json).HasParseError()) throw std::exception("Unable to parse message");
我也查看了我的所有項目設置,找不到任何會導致解析失敗的差異。
發現問題,當 JSON 最初形成時,快速的 json 字符串緩沖區 GetString() 方法返回一個 char*,它在調試模式下從堆棧中釋放,然后才能使用。 將返回類型更改為字符串解決了這個問題。 這是我編寫 JSON object 的固定方法:
StringBuffer sb;
Writer<StringBuffer> writer(sb);
writer.StartObject();
writer.String("msg_type");
writer.Int(msg.Type());
writer.String("msg");
writer.String(msg.Msg().c_str());
writer.EndObject();
const char* ret_val = sb.GetString();
std::string return_string(ret_val);
return return_string;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.