2012-08-22 5 views
1

누군가 메모리 누수가 있는지 확인할 수 있습니까? 나는 혼란 스럽다. 당신이 params_list에 대한 참조를 누출되도록메모리 누수가 발생할 수 있음

C API documentation에서 언급 한 바와 같이
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

Py_BuildValue에 대한 O 형식 코드는 인수의 참조 카운트를 증가시킨다.

Py_DECREF 전화를 추가하거나 처럼 동작하지만 그 인수의 소유권을 취하는 N 형식 코드를 대신 사용하여이 문제를 해결할 수 있습니다.

관련 문제