函数调用中指针的以下用法是内存泄漏:
bson_t * parse_json(const char * json_fields){
bson_error_t error;
bson_t *bson_fields = bson_new_from_json((unsigned char *)json_fields, -1, &error);
if (!bson_fields) {
log_die("Error: %s\n", error.message);
} else {
return bson_fields;
}
log_die("Error: something bad happend in parse_columns");
return bson_fields; // this should never be reached ...
}
以下代码有效,但parse_json
指针在这里发生了什么?这是内存泄漏吗?
bson_concat(fields, parse_json(json_fields));
mongodb C-API提供函数bson_destory
:
bson_destroy(fields);
我想知道明确释放new_fields
的记忆可能会更好:
bson_t *new_fields = parse_json(json_fields);
bson_concat(fields, new_fields);
bson_destroy(new_fields);
虽然这个例子使用mongodb c-api,但我也试图了解一般情况。
some_type * pointer_returner(){
some_type *var;
...
return var;
}
do_something(pointer_retuner());
上面的调用会导致内存泄漏吗?
答案 0 :(得分:3)
是的,您需要调用bson_destroy
来取消分配不再使用的结构对象。
来自bson_destroy
documentation:
bson_destroy()函数将释放已分配的bson_t结构。
除非另有说明,否则应在使用bson_t时始终调用此函数。