【发布时间】:2015-03-31 23:59:00
【问题描述】:
我目前正在研究 C 和 Python 之间的接口,但我发现了一个我无法解决的问题:我想将一个结构传递给 Python。听起来很简单,但不知何故,我不断收到 SegFault。我已经准备好一切,以便返回的对象可以从 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 struct interface segmentation-fault