C - 覆盖项目时数组的内存泄漏问题

时间:2017-03-17 04:57:29

标签: c arrays memory-leaks glib

在相当长的一段时间内没有触及C并正在审查一些代码。我看到一个JsonObjects数组,他们试图在数组中覆盖之前释放JsonObject *。我看到内存泄漏,正在调查根本原因。欢迎任何有关根本原因的见解和更好实施的建议。以下是一个片段:

#include <json-glib/json-glib.h> 

MAX_SAMPLES = 5;
JsonObject* array[MAX_SAMPLES];
int index = 0;
bool maxSamplesReached = false;

void foo(){
    if(index >= MAX_SAMPLES){
        index = 0;
        maxSamplesReached = true;   
    }

    if(maxSamplesReached){
       json_object_unref(array[index]); 
       //array[index] = NULL //does not help
    }

    JsonObject *root = json_object_new();
    JsonNode *node = json_node_new(JSON_NODE_VALUE);
    json_node_set_string(node, "value");
    json_object_set_member(root, "key", node);

    array[index++] = root;
}

调用json_object_unref(array [index])应该释放先前的内存并且新对象应该等于释放的内存是否正确?所以我期待内存不会增长,但这肯定会泄露内存。经常调用foo(),并且想法是将样本的历史记录同步到服务器,如果maxSamplesReached = true,则将同步MAX_SAMPLES。

0 个答案:

没有答案