c - 使用函数调用中函数返回的指针

时间:2014-12-21 22:27:14

标签: c mongodb memory-management

函数调用中指针的以下用法是内存泄漏:

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

上面的调用会导致内存泄漏吗?

1 个答案:

答案 0 :(得分:3)

是的,您需要调用bson_destroy来取消分配不再使用的结构对象。

来自bson_destroy documentation

  

bson_destroy()函数将释放已分配的bson_t结构。

     

除非另有说明,否则应在使用bson_t时始终调用此函数。