c++ - 可能的内存泄漏

标签 c++ python cpython python-embedding python-extensions

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

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_BuildValueO 格式代码会增加其参数的引用计数,因此您正在泄漏对 params_list 的引用。

您可以通过添加 Py_DECREF 调用或使用 N 格式代码来解决此问题,它的行为类似于 O 但拥有所有权它的论点。

关于c++ - 可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080978/

相关文章:

python - 接受以空格分隔的整数输入(无效文字错误)Python

python - 清除pyglet资源缓存

c++ - memcpy 标记为缓冲区溢出

c++ - 什么时候在 .cpp 文件中包含库?

c++ - 旋转 Atan2 CCW CW 连续性

c++ - QGraphicsView/QGraphicsScene渲染问题

python - 如何在Python/Django中检查字段的值是否已被删除

python - 当人们说 CPython 是用 C 编写的时,这意味着什么?

python - 为什么朴素的字符串连接在一定长度以上会变成二次方?

python - 当需要执行多个线程时如何操作GIL?