【发布时间】:2010-03-31 20:18:33
【问题描述】:
我正在为 C++ 库编写一个 Python 包装器,当我尝试在 C 中设置一个结构的字段时,我感到很奇怪。如果我有这样的结构: p>
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 中查看我想要的所有值,但是当我尝试设置它的那一刻,它在我面前炸开了锅。我在这里遗漏了一些基本的东西吗?
【问题讨论】: