python - C 到 Python 接口(interface) - 尝试传递结构

标签 python c struct interface segmentation-fault

我目前正在开发 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/

相关文章:

python - 二维数组一维中的 Numpy 局部最大值

python - 不能单独工作的 Unicode 字符,Python

c++ - 检索标签之间的值 XML Xerces C++ Parser

struct - 为什么在 Rust 中允许返回当前函数拥有的引用?

c - 使用 malloc 创建的结构体设置值的段错误

python - 如何计算每个季节有多少天的答案等于 pandas 数据框中的不同数字?

python - 我怎样才能向量化这个 python 计数排序,使其绝对尽可能快?

C 编译器警告 Unknown escape sequence '\.' using regex for c program

c - 在不使用函数指针的情况下替代在 C 中引用虚拟表。

go - 从接口(interface)中获取所有字段