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 に答える