可能的内存泄漏

Possible memory leaks

本文关键字:泄漏 内存      更新时间:2023-10-16

有人可以检查是否存在内存泄漏吗?我很困惑。

PyObject * somefunc(int function_id, int num_params, int * params){
    PyObject * params_list=PyList_New(0);
        for(int i=0; i < num_params; i++){
             PyObject * val = Py_BuildValue("i", params[i]);
             PyList_Append(params_list, val);
             Py_DecRef(val);
        }
        PyObject * arglist = Py_BuildValue("(i,O)",
            function_id, params_list);
         //Should I DecRef(params_list) ??
        return arglist;
}

如 C API 文档中所述,Py_BuildValueO格式代码会递增其参数的引用计数,因此您正在泄漏对 params_list 的引用。

可以通过添加Py_DECREF调用或改用N格式代码来解决此问题,该代码的行为类似于O,但拥有其参数的所有权。