在相当长的一段时间内没有触及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。