0

cJSON メモリ リークは、メモリ リークが発生した投稿です。しかし、この場合の問題は cJSON_Print() 関数です。

私はこの関数を使用しませんでした (当分の間コメントしました) が、まだメモリ リークが発生しています。私のオードはこんな感じ

void myFunc(cJSON* ptr)
{
    /*some code */
     // I have used some sint32 numbers from another library for simplicity
     // i will use int
     int num = 30
     cJSON_AddItemToArray(pt_data,cJSON_CreateNumber(num));
}

int main()
{
    cJSON *root =cJSON_CreateObject();
    cJSON *pt_PPC= cJSON_CreateArray();
    cJSON_AddItemToObject(root,"PowerPC",pt_PPC);
    cJSON *pt_data = cJSON_CreateArray();
    cJSON_AddItemToArray(pt_PPC,pt_data);
    int i;
    for(i=0;i<10;i++)
       myFunc(pt_PPC);
    cJSON_Delete(root);
    return 0;
}

記憶は時間とともに増加します。助言がありますか?

4

3 に答える 3

1

VS2015 でコードを試してみたところ、myFunc関数がコンパイルされていないことがわかりました。この関数cJSON_AddItemToObjectは 3 つのパラメーターを取りnum、定義すらされていません。

次のコードで試しました:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include "cJSON.h"

void myFunc(cJSON* ptr)
{
    /*some code */
    cJSON_AddItemToObject(ptr, "Item", cJSON_CreateNumber(10.0));
}

int main()
{
    cJSON *root = cJSON_CreateObject();
    cJSON *pt_PPC = cJSON_CreateObject();
    cJSON_AddItemToObject(root, "PowerPC", pt_PPC);
    myFunc(pt_PPC);
    cJSON_Delete(root);

    _CrtDumpMemoryLeaks();
}

メモリ リークのデバッグを有効にし (記事へのリンク)、_CrtDumpMemoryLeaks()メモリ リークの可能性がある場合はそれを (デバッグ出力ウィンドウに) 出力するために使用しました。

メモリ リークは検出されませんでした。

于 2015-09-10T15:48:47.750 に答える
0

あなたのコードは完全ではなく、構文エラーがあるため、コードを見て問題がどこにあるのかを正確に判断することはできません。

いずれにせよ、JSON オブジェクト (どこか) を作成していて、それをルート オブジェクトまたはその子孫のいずれかに追加するのを忘れている可能性が最も高いです。ルート オブジェクトが削除されると、接続されていない要素は削除されず、メモリ リークが発生します。

お役に立てれば。

于 2015-09-10T16:15:57.043 に答える