2013-09-04 7 views
1

내가하려고 해요을 멱등 각각 다음과 같은 C 코드와 인터페이스가 없습니다 :PyList_GetItem는 꿀꺽 꿀꺽를

// example.c 
#include <Python/Python.h> 
PyObject *test (PyObject *self, int i) { 
    PyObject **x; 
    x = malloc(sizeof(PyObject *)); 
    *x = PyList_GetItem(self, i); 
    return *x; 
} 

// example.i 
%module example 
%{ 
/* Put header files here or function declarations like below */ 
extern PyObject* test(PyObject *self, int i); 
%} 

extern PyObject* test(PyObject *self, int i); 

제대로 컴파일 나는 확장 모듈의 벌금을 가져올 수 있습니다. 사실, 변수 a를 [{1 : 1}, {2 : 2}]로 정의하고 처음으로 example.test (a, 0)를 수행하면 {1,1}이 올바르게 반환됩니다. 파이썬 쉘에 들어가면 예상대로 [{1 : 1}, {2 : 2}]가됩니다. example.test (a, 0)를 다시 시도하면 세그먼트 화 오류가 발생합니다. 왜 이런 일이 일어나고 있는거야?

답변

2

PyList_GetItem의 PyObject * (*의 PyObject 목록 Py_ssize_t 인덱스)
리턴 값 : 참조 차용.

반환하기 전에 개체를 증가 시키십시오.