PyArg_ParseTuple触发Segmentation fault

如题,使用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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值