C++ 使用JsonCpp解析字符串时使用SIGSEGV
我有一个序列化为JSON的任务:C++ 使用JsonCpp解析字符串时使用SIGSEGV,c++,jsoncpp,C++,Jsoncpp,我有一个序列化为JSON的任务: { text: "Some task", status: 1 } 我在序列化命名空间中使用此函数: Task parseTask(std::string task) { Json::Value root; Json::Reader reader; if(reader.parse(task, root, false)) { std::string text = root["text"].asString();
{
text: "Some task",
status: 1
}
我在序列化
命名空间中使用此函数:
Task parseTask(std::string task) {
Json::Value root;
Json::Reader reader;
if(reader.parse(task, root, false)) {
std::string text = root["text"].asString();
int status = root["status"].asInt();
Task result(text);
if(status == 1) result.setCompleted();
return result;
}
}
我按如下方式调用该函数:
Task t = Serialize::parseTask("{ text: \"Some Task\", status: 1 }");
并使用-ljsoncpp
选项进行编译。然而,我得到:
terminated by signal SIGSEGV (Address boundary error)
我一直在浏览JsonCpp文档,但似乎找不到我的代码有什么问题。我没有看过你的代码,但你的JSON无效。密钥名称必须用引号括起来。尝试:
Task t = Serialize::parseTask("{ \"text\": \"Some Task\", \"status\": 1 }");
这种错误通常是非常简单的,使用调试器进行回溯。您会考虑Qt中的JSON解析器吗?那是最快的。它甚至打败了著名的C json解析器!如果您愿意,我可以给您基准测试。GDB只抛出程序接收信号SIGSEGV,分段错误。0xb7e0e6f2英寸??()来自/lib/i386linux-gnu/i686/cmov/libc.so.6。信息量不大解析失败时不返回。使用此有效的JSON可以避免在解析发生时执行错误的代码(不返回),但代码仍然是错误的。