open-source-parsers/jsoncpp

Memory leak: Json::Value cannot be release

OnlySoaring opened this issue · 4 comments

Describe the bug
When I use Json:: Reader or Json:: parseFromStream to create Json:: Value, the memory of Json:: Value is not released when the function ends

To Reproduce

int main(int argc, char** argv)
{
  while(true)
  {
    Json::Value root;
    std::ifstream ifs("/opt/user.json");
    Json::Reader reader;
    reader.parse(ifs, root);
    ifs.close();

    std::cout<<"1"<<std::endl;
    break;
  }

  while(true)
  {
    std::cout<<2<<std::endl;
  }
return 0;
}

Expected behavior
My JSON file has 681MB. When the test program printed 1, the program occupied 2.12GB of memory. At the end of "while", Json:: value should be released, but when the test program prints 2, the memory does not decrease. Whether I use Json:: Reader or Json:: parseFromStream, it's the same. This is fatal for multi program projects as it occupies useless memory.

Desktop (please complete the following information):

  • OS: Ubuntu20.04
  • C++ 17

Use Json:: Value root or Json:: Value * root=new Json:: Value (); Also unable to release

I tried this code. However, the code shows a memory leak when you are not handling the signal. If you handle the SIGINT signal try to break the loop using CTRL + C. There is no memory leak. Here is my code. please try this.

#include "jsoncpp/json/json.h"
#include <iostream>
#include <fstream>
#include <signal.h>

bool is_true = true;
void sigint(int signum)
{
is_true = false;
}

int main(int argc, char** argv)
{
signal(SIGINT,sigint);

while(true)
{
Json::Value root;
std::ifstream ifs("/opt/user.json");
Json::Reader reader;
reader.parse(ifs, root);
ifs.close();

`std::cout<<"1"<<std::endl;`
`break;`

}

while(is_true)
{
std::cout<<2<<std::endl;
}
return 0;
}