1

我正在尝试 Swig 并分别具有以下 C 代码和接口:

// 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}。当我将 a 输入 Python shell 时,我得到 [{1:1},{2:2}] 的预期。当我再次尝试 example.test(a,0) 时,出现分段错误。任何想法为什么会发生这种情况?

4

1 回答 1

2

PyObject* PyList_GetItem(PyObject *list, Py_ssize_t index)
返回值:借用参考

在返回之前增加对象。

于 2013-09-04T05:36:18.880 回答