有人可以检查是否存在内存泄漏吗?我很困惑。
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 documentation 中所述,Py_BuildValue
的 O
格式代码会增加其参数的引用计数,因此您正在泄漏对 params_list
的引用。
您可以通过添加 Py_DECREF
调用或使用 N
格式代码来解决此问题,它的行为类似于 O
但拥有所有权它的论点。
关于c++ - 可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080978/