Ошибка сегментации при чтении json-файла

Мне нужно прочитать информацию, содержащуюся в файле json, следующим образом:

{"first":10, "second":"0", "P1":"1.e-20","P2":"1000","P3":"1000","P4":"1000","P5":"1"}

Поскольку у меня нет опыта решения этой проблемы, я начал с того, что поэкспериментировал с коротким кодом, который вы видите под этими строками. Он компилируется без проблем, но при выполнении возвращает ошибку сегментации. Файл general.json находится в той же папке. Информация, содержащаяся в файле json, правильно печатается на экране, если я прокомментирую последнюю строку. Может ли кто-нибудь сказать мне, что я делаю неправильно?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream> // fstream.h in old versions of g++
#include <iostream>  //para cout
#include <sstream>
#include <json/json.h>

using namespace std;

int main() {
struct json_object *new_json, *json_arr, *json_reg, *json_field;
string line;
stringstream jsonfile;

ifstream json("file.json", ios::in); 
{getline(json, line); do {jsonfile << line;} while (getline(json, line));}
json.close();
cout << jsonfile.str().c_str();
new_json=json_tokener_parse(jsonfile.str().c_str());
json_field=json_object_object_get(json_reg, "first");
}

person user1046064    schedule 04.10.2013    source источник


Ответы (1)


Вы используете указатель json_reg без его инициализации, и функция разыменовывает его. Вы (скорее всего) используете json-c, где :

  • json_object_object_get вызывает json_object_object_get_ex объект

  • json_object_object_get_ex делает switch(jso->o_type) разыменование недопустимого указателя

person cnicutar    schedule 04.10.2013
comment
Большое спасибо, вы правы, я использовал json_reg вместо new_json в последней строке. Теперь это исправлено. - person user1046064; 04.10.2013