我目前正在开发 C 和 Python 之间的接口(interface),并且发现了一个我无法解决的问题:我想将一个结构传递给 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
由于某种原因,出现了 SegFault - 有人知道为什么吗?
谢谢, 卢卡斯。
最佳答案
好吧,我想通了 - 至少有一个解决方法可以解决问题。无论如何,只是为了完整性:可以将自创建的 Python-C-Objects 从 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.
关于python - C 到 Python 接口(interface) - 尝试传递结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29380581/