C 到 Python 接口 - 尝试传递结构

C to Python interface - Trying to pass structs

我目前正在研究 C 和 Python 之间的接口,我发现了一个我无法解决的问题:我想将一个结构传递给 Python。听起来很简单,但不知何故,我一直收到段错误。我已经准备好一切,以便返回的对象可以从 Python 中使用。如果我在 Python 中创建它的一个实例,它工作得很好,但当它从函数返回时我无法使用它。对应代码如下:

typedef struct{
    PyObject_HEAD
    op *grid;
    double beta, *umatrix, *energies, weight;
    int nflavours, opCount;

} SegmentTrace;


typedef struct{
    PyObject_HEAD
    double ratio;
} SegInsert;


static PyObject *segTr_insert(SegmentTrace *self, PyObject *args)
{
    SegInsert *res = (SegInsert*)malloc(sizeof(SegInsert));
    return Py_BuildValue("O", (PyObject*)res);
}

使用这些定义(以及相应的类型定义)我可以执行以下操作:

import cs

obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_2 = cs.segInsert()

print obj_2.ratio

但不是:

import cs

obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_3 = obj_1.insert()

print obj_3.ratio

出于某种原因,出现了段错误 - 有人知道为什么吗?

谢谢, 卢卡斯

好的,我想通了 - 至少有一个解决方法可以解决问题。无论如何,只是为了完整起见:可以将自创建的 Python-C 对象从 Python 传递给某些 C 例程并在那里使用数据。也就是说,而不是

obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_3 = obj_1.insert()

使用:

obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_3 = cs.segInsert(obj)

工作正常 ;) L.