我正在寫一個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代碼工作正常,返回struct成員的值。調用SetBit方法給出的地址爲foo的對象的錯誤訪問存儲器地址欄,它不能被「寫入」。
我對代碼進行了探索,就像我可以從C和Python中看到所有我想要的值,但是當我試圖設置它的時候,它就在我的臉上。我在這裏錯過了什麼?
這是一款Core2 Duo筆記本電腦。我認爲,Python布爾應該是內部的整數。 編輯:葉神。就是這樣。我切換到一個int,並突然它不爆炸。我勒個去*。 – 2010-03-31 20:30:19
@Lee:Python bools可能是整數,但C++不是:-)(例如,它們是Visual C++的字節) – 2010-03-31 20:35:40
讓我感到尷尬。 – 2010-03-31 20:43:31