2013-09-07 2 views
0

Я задача сериализовать JSON:SIGSEGV при разборе строки с JsonCpp

{ 
    text: "Some task", 
    status: 1 
} 

Я использую эту функцию внутри Serialize имен:

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 документации, но не могу найти, что случилось с моим кодом.

+0

Этот вид ошибки, как правило, очень прост для отслеживания с помощью отладчика. –

+0

Вы считаете json parser в Qt? Это быстрее. Он даже превосходит известного C json parser! Я могу дать вам тесты, если хотите. – lpapp

+1

GDB выбрасывает только принятый сигнал программы SIGSEGV, ошибка сегментации. 0xb7e0e6f2 in ??() из /lib/i386-linux-gnu/i686/cmov/libc.so.6. Не очень информативно – jviotti

ответ

0

Я не смотрел ваш код, но ваш JSON недействителен. Имена ключей должны быть окружены кавычками. Попытка:

Task t = Serialize::parseTask("{ \"text\": \"Some Task\", \"status\": 1 }"); 
+0

Используя этот действительный JSON, вы избежите выполнения неправильного кода (без возврата), когда происходит синтаксический разбор, но код все еще не прав. – mpromonet

Смежные вопросы