2017-11-21 32 views
0

JSONファイルにJSONファイルを読み取り中:C++ jsoncpp:とSegfaultループ

[ 
    {"A":"sample1","B":"sample2","C":"sample3,"D":"sample4"},  
    {"A":"sample5","B":"sample6","C":"sample7,"D":"sample8"}, 
    {"A":"samplea","B":"sampleb","C":"sampleb,"D":"sampleb"}, 
    . 
    . 
    . 
    } 
] 

私は、入力ファイル内

struct entry_t 
{ 
    U64 param; 
} 
entry_t entry; 
Json::Value root; 
Json::Reader reader; 
ifstream test("json_file", ifstream::binary);  
if(!reader.parse(test, root, false)) 
{ 
    cout << reader.getFormattedErrorMessages() << endl;} 
else 
{ 
    for(unsigned int i = 0; i < root.size(); i++) 
    { 
     entry.param = root[i].get("A", "null").asInt(); 
    } 
} 

コード上記2075980ようなエントリが472783thループまで正常に動作しています。次のループで "entry.param"にアクセスしようとしたときにsegフォルトが発生する

私はC++とjsoncppを初めて使用しているため、segフォルトの原因を突き止めることはできません。

のWindows OSでテスト
+0

jsonファイルにはいくつのアイテムがありますか? – Arash

+0

@ArashMohammadi _ "入力ファイルに2075980のエントリがあります" _ – user0042

+0

バイナリとしてファイルを読み込むのはなぜですか? – Arash

答えて

0

、JsonCPPはメモリ内のファイルを保存するために2.5ギガバイトを割り当て...

あなたが64ビットに切り替えるか、小さいメモリフットプリントで他のネイティブのlibを使用する必要があります(see here

memory usage

+0

また、ファイルを読み込むためのより良い方法を使用してください。これは、すべてを一度にメモリに保存する必要はありません。 –

関連する問題