如题,使用Python/c api编写python扩展,要从python端传递dict过来
写好代码一编译运行,果不其然出现了亲爱的Segmentation fault
经过排查,发现是以下代码引发的段错误
PyObject* _py_data = nullptr; // Python对象指针
packets::unconnected_ping _pupr_tmp_packet;//自定义的结构体
if(!PyArg_ParseTuple(args,"O", _py_data)) // 此处PyArg_ParseTuple引发了段错误
{
return Py_None;
}
cout << "SEGFAULT DEBUG" << endl;
当时想了半天都想不出来原因,然后就开始面向百度编程
最后发现自己犯了个低级,但是不完全低级的错误
( http://cn.voidcc.com/question/p-objoqdae-rr.html )
那就是format有O的时候,要双重指针
(不知道O代表什么的请查python官方文档 http://docs.python.org/zh-cn/3/c-api/arg.html )
修改后的代码如下
PyObject* _py_data = nullptr;
packets::unconnected_ping _pupr_tmp_packet;
if(!PyArg_ParseTuple(args, "O", &_py_data/*双重指针*/)) {
return Py_None;
}
cout << "SEGFAULT DEBUG" << endl;