Fuite de mémoire à l’aide de JSON-C

Je suis nouveau sur JSON-C, veuillez consulter mon exemple de code et laissez-moi savoir qu’il créera une fuite de mémoire. Si oui, comment libérer un object 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 ?? 

Dois-je nettoyer new_obj, si oui, comment. Quelqu’un peut-il aider à comprendre comment faire de la gestion de la mémoire JSON-C.

Merci d’avance

NON, nous devons appeler json_object_put une seule fois pour un object racine tant que nous n’allouons pas explicitement la mémoire à json-object et cela a fonctionné pour moi ….. !!

Oui, je crois que votre code perdra de la mémoire. Le problème est que vous écrasez votre pointeur new_obj plusieurs fois. Votre code devrait ressembler à ceci:

 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); 

S’il vous plaît laissez-moi savoir si cela fonctionne pour vous. Si vous souhaitez davantage d’aide, json-c dispose d’un mode de comptage de références qui peut vous fournir davantage d’informations sur les objects. Faites le moi savoir et je peux élaborer sur cela plus.