Вы используете другую функцию для установки строк JSON: json_object_set_new
вместо json_object_set
из связанного вопроса.
Ваша версия добавляет элемент в json-объект и "повторно" использует ссылку. Это не увеличивает счетчик.
Поэтому вам не нужно уменьшать его вручную.
В комментарии под ответом на этот вопрос также упоминается json_object_set_new
.
Добавленный элемент будет свободен вместе с основным объектом JSON json_body
.
Это означает, что счетчики ссылок всех подобъектов автоматически уменьшаются. Если счетчик падает до 0, объект свободен.
Если вы удерживаете ссылку на подобъект самостоятельно, объект не будет свободным.
Просто пример:
Вы создаете объект (вызов json_string()
), и он получит счетчик ссылок == 1.
Вариант а) (из связанного вопроса)
Вы добавляете этот объект к другому объекту с новой ссылкой.
Это делается с помощью json_object_set
. Затем счетчик увеличивается до 2.
Если вы удаляете основной объект (json_decref(json_body)
) Счетчик снова уменьшается до 1, но строка все еще не освобождена.
Вам нужно использовать json_decref(srting)
, чтобы освободить память.
Вариант б) (ваш код)
Вы добавляете этот объект к другому объекту с передачей существующей ссылки.
Это делается с помощью json_object_set_new
. Тогда счетчик сохраняется на значении 1.
Если вы удаляете основной объект (json_decref(json_body)
) Счетчик уменьшается до 0, и теперь строка освобождается вместе с основным объектом.
Вам не нужно использовать json_decref(srting)
для освобождения памяти.