1

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

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;
}
4

1 回答 1

3

C API 文档中所述,O格式代码Py_BuildValue增加其参数的引用计数,因此您正在泄漏对params_list.

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

于 2012-08-27T03:23:10.117 回答