具有动态siz的Python Cextension类

2024-04-23 15:48:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试编写包含python类的C扩展。你知道吗

这个类将一个文件名作为构造函数的参数fname,然后将该文件加载到内存并存储为配置文件。你知道吗

以下是我所拥有的:

typedef struct {
    PyObject_HEAD
    XmlConfig m_cfg;
} PyAgent;

static int PyAgent_init(PyAgent *self, PyObject *args) {
    const char *fname;
    if (!PyArg_ParseTuple(args, "s", &fname)) {
    return NULL;
    }
    self->m_cfg.Load(fname);
    return 0;
}

static PyTypeObject PyAgentType = {
   PyObject_HEAD_INIT(NULL)
   0,                                            /* ob_size */
   "classify.Agent",                             /* tp_name */
   ...
}
...

当我尝试加载文件时,出现了分段错误。据我所知,这是因为PyAgent struct的对象大小由于文件的内存分配而增加。你知道吗

我试过使用PyObject_VAR_HEAD宏,但没用。你知道吗

你能给出一个线索或类似的例子吗?你知道吗


Tags: 文件内存self参数return文件名argsstatic
1条回答
网友
1楼 · 发布于 2024-04-23 15:48:32

也许self->m_cfg需要先初始化?你在上面调用C++方法,但没有先调用它的构造函数。结构由C代码分配,而不是C++,所以不知道需要构造这个字段。你知道吗

有一些方法可以手动调用构造函数(如果我记得正确的话,比如^ {CD2>}),但是最简单的方法可能是有一个字段^ {< CD3>},并且根据需要使用C++操作符的通常语法来分配和释放它。{< CD4>}和^ {< CD5>}(后者被放在^ {CD6>})中。你知道吗

相关问题 更多 >