python & c-c++单元程序原因段
Posted
技术标签:
【中文标题】python & c-c++单元程序原因段【英文标题】:python & c-c++ unit programme cause Segment 【发布时间】:2019-12-19 11:23:23 【问题描述】:当我通过 ctypes 为 python 编写 c++ 扩展模型代码时,一切看起来都很好。 永远,最后,python 调用 c++ 函数并返回 PyObject * 得到一个段错误,我猜是 python gc relase c++ 内存。希望各位朋友能给我一个好主意,非常感谢
LID = ctypes.CDLL('./lib/a.out')
LID.cutall_prx.argtypes = [c_char_p]
LID.cutall_prx.restype = py_object
res = LID.cutall_prx('abc')
print res
extern "C" PyObject * cutall_prx(const char *content)
PyObject *oplist = PyList_New(10 + 1);
for(uint32_t j = 0; j < 10; j++)
PyList_Append(oplist, PyInt_FromLong(j));
return oplist;
print res 导致“分段错误”的地方
【问题讨论】:
【参考方案1】:来自文档:
注意:如果 len 大于零,则返回的列表对象的项设置为 NULL。因此,在使用 PyList_SetItem() 将所有项目设置为真实对象之前,您不能 [...] 将对象公开给 Python 代码。”
您正在向 Python 提供一个包含 11 个 NULL 指针的列表,后跟 10 个 Long 对象,而不是用值覆盖 NULL 指针。
尝试改用PyList_SetItem
:
extern "C" PyObject * cutall_prx(const char *content)
PyObject *oplist = PyList_New(10);
for(uint32_t j = 0; j < 10; j++)
PyList_SetItem(oplist, j, PyInt_FromLong(j));
return oplist;
【讨论】:
以上是关于python & c-c++单元程序原因段的主要内容,如果未能解决你的问题,请参考以下文章