user1046064
user1046064

Reputation: 3

segmentation fault reading json file

I need to read the information contained in a json file like this:

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

Since I do not have experience with this issue, I started by playing with the short code you can see below these lines. It does compile with no problem but it gives a segmentation fault back upon execution. The file general.json is in the same folder. The information contained in the json file is correctly printed in the screen if I comment the last line. Could anyone tell me what am I doing wrong?

#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");
}

Upvotes: 0

Views: 829

Answers (1)

cnicutar
cnicutar

Reputation: 182609

You are using the json_reg pointer without initializing it and the function dereferences it. You are (most likely) using json-c where:

  • json_object_object_get calls json_object_object_get_ex on the object

  • json_object_object_get_ex does switch(jso->o_type) dereferencing an invalid pointer

Upvotes: 1

Related Questions