Intereting Posts
Динамический указательный массив для динамического массива 2 измерений? Есть ли обратная функция для strstr Как использовать время c в linux для печати времени выполнения функции? Как проверить, была ли инициализирована переменная в C? Массивы с переменным размером в C Неопределенная ссылка на RSA_generate_key в OpenSSL? c99 goto прошлой инициализации Помогите конвертировать bitmap в png в памяти с помощью libpng Использовать flock () в обработчике sigaction Как эффективно отлаживать многопоточное проклятие клиент-серверного приложения с помощью gdb? Как писать во флэш-память с помощью встроенной сборки? Расшифровать ключ профиля WLAN wlan с помощью CryptUnprotectData Ограничить ключевые слова и указатели внутри структур Восстановление IP / порта из дескриптора Socket Чтение и запись процесса “через / dev / mem, текстовый сегмент работает, но сегмент данных не может, почему?

Утечка памяти с помощью JSON-C

Я новичок в JSON-C, см. Мой пример кода и сообщите мне об этом, создаст утечку памяти, если да, то как освободить объект JSON-C.

struct json_object *new_obj = NULL; new_obj = json_tokener_parse(strRawJSON); new_obj = json_object_object_get(new_obj, "FUU"); if(NULL == new_obj){ SYS_OUT("\nFUU not found in JSON"); return NO; } new_obj = json_object_object_get(new_obj, "FOO"); // I m re-using new_obj, without free it? if(NULL == new_obj){ SYS_OUT("\nFOO not found in JSON"); return NO; } // DO I need to clean new_obj, if yes then how ?? 

Нужно ли мне очищать new_obj, если да, то как. Может ли кто-нибудь помочь понять, как управлять памятью JSON-C.

Заранее спасибо

    НЕТ. Нам нужно вызвать json_object_put только один раз для объекта root, если мы явно не выделяем память json-объекту, и это сработало для меня ….. !!

    Да, я считаю, что ваш код будет утечка памяти. Проблема в том, что вы переписываете свой указатель new_obj несколько раз. Ваш код должен выглядеть примерно так:

     struct json_object *new_obj, *fuu_obj, *foo_obj; new_obj = json_tokener_parse(strRawJSON); fuu_obj = json_object_object_get(new_obj, "FUU"); if(NULL == new_obj){ SYS_OUT("\nFUU not found in JSON"); return NO; } foo_obj = json_object_object_get(new_obj, "FOO"); if(NULL == new_obj){ SYS_OUT("\nFOO not found in JSON"); return NO; } json_object_put(foo_obj); json_object_put(fuu_obj); json_object_put(new_obj); 

    Пожалуйста, дайте мне знать, если это сработает для вас. Если вам нужна дополнительная помощь, json-c имеет режим подсчета ссылок, который может предоставить вам больше информации об объектах. Дайте мне знать, и я могу подробнее остановиться на этом.