2012-08-22 163 views
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; 
} 
+0

當您嘗試代碼時會發生什麼? –

+0

我沒有使用過cpython,但是你應該在函數結尾處釋放params_list內存,就像你所說的那樣。 – Stuart

+0

你的輸出是什麼? – Abhineet

回答

3

正如C API documentation提到的,Py_BuildValueO格式代碼遞增其參數的引用計數,這樣你就泄漏到params_list參考。

您可以通過添加Py_DECREF調用或使用N格式代碼來修復此問題,該代碼的作用與O類似,但取代了其參數的所有權。