gpt4 book ai didi

python - 为什么在 C 中设置此成员会失败?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:50 26 4
gpt4 key购买 nike

我正在为 C++ 库编写一个 Python 包装器,当我试图在 C 中设置一个结构的字段时,我感到真的很奇怪。如果我有这样一个结构:

struct Thing
{
PyOBJECT_HEAD
unsigned int val;
};

并且有两个这样的函数:

static PyObject* Thing_GetBit(Thing* self, PyObject* args)
{
unsigned int mask;

if(!PyArg_ParseTuple(args, "I", &mask))
Py_RETURN_FALSE;

if((self->val & mask) != 0)
Py_RETURN_TRUE;

Py_RETURN_FALSE;
}


static PyObject* Thing_SetBit(Thing* self, PyObject* args)
{
unsigned int mask;
bool on;

if(!PyArg_ParseTuple(args, "Ii", &mask, &on))
Py_RETURN_FALSE;

if(on)
self->val |= mask;
else
self->val &= ~mask;

Py_RETURN_TRUE;
}

调用第一个方法的 Python 代码工作正常,返回结构成员的值。调用 SetBit 方法时出现错误,地址为 foo 的对象访问地址为 bar 的内存,无法“写入”。

我浏览了代码,似乎我可以从 C 和 Python 中查看我想要的所有值,但当我尝试设置它时,它在我面前爆炸了。我是否遗漏了一些基本的东西?

最佳答案

是否有可能是传递 bool PyArg_ParseTuple 的地址导致了您的麻烦? “i”格式将写入一个 int 大小的东西。

你在什么样的机器上运行?

关于python - 为什么在 C 中设置此成员会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com