我尝试编写包含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宏,但没有帮助。您能提供一个线索或类似的例子吗? 最佳答案 也许self->m_cfg首先需要初始化?您正在对其调用C ++方法,但没有先调用其构造函数。该结构是由C代码而不是C ++分配的,因此它不知道需要构造此字段。有多种方法可以手动调用构造函数(如果我没记错的话,类似于new(&self->m_cfg) XmlConfig()),但是最简单的方法可能是改为使用字段XmlConfig *cfg,并根据需要使用C ++运算符的常规语法来分配和释放它和new(后者放在delete中)。
08-25 05:14