Я использую библиотеку C++rapidjson, с помощью которой вы можете создать объект JSON. В настоящее время у меня есть некоторые проблемы с памятью.
Ситуация:
В моей текущей настройке я создал новый объект и добавил к нему элементы-значения и элемент массива. Объект передается по ссылке нескольким функциям и используется в потоке моей программы.
rapidjson::Value data;
data.SetObject();
while(...)
{
// --------------------------
// Add coordinates to object
JSON::AllocatorType& allocator = data.GetAllocator();
JSONValue region;
region.SetArray();
region.PushBack(rectangle.m_x1, allocator);
region.PushBack(rectangle.m_y1, allocator);
region.PushBack(rectangle.m_x2, allocator);
region.PushBack(rectangle.m_y2, allocator);
data.AddMember("regionCoordinates", region, allocator);
// --------------------------
// Add number of changes
data.AddMember("numberOfChanges", numberOfChanges, allocator);
... call function and pass data
... call function2 and pass data
if(data.MemberBegin() != data.MemberEnd())
{
data.EraseMember(data.MemberBegin(), data.MemberEnd());
}
}
Я использую один и тот же объект в цикле и, таким образом, стираю элементы объекта перед тем, как снова добавить элементы. Я использую для этого функцию EraseMember. Однако я заметил, что эта функция не освобождает память члена массива и, таким образом, происходит утечка памяти.
Как я могу заставить Rapidjson выпустить полный объект со всеми его членами?