C++模块中创建PyTuple导致崩溃
我在写的一个C++模块中遇到了一些麻烦,想要返回一个包含坐标的元组(tuple of tuples)。我觉得代码看起来没问题,dirty
列表里有两个Coord
,所以len
的值是2,列表中这两个项的x
和y
值分别是0,0
和0,1
。这是我第一次尝试这样做,所以可能对文档理解有误。有没有什么提示?
PyObject* getDirty()
{
int len = dirty.size();
PyObject* tuple = PyTuple_New(len);
int count = 0;
for (std::list<Coord>::iterator i = dirty.begin(); i != dirty.end(); ++i)
{
PyTuple_SET_ITEM(tuple, count, PyTuple_Pack(2, (*i).x, (*i).y));
++count;
}
return tuple;
}
编辑:哦,忘了提,实际出错的地方是在PyTuple_Set_ITEM
这一行。
1 个回答
1
在使用 PyTuple_Pack
的时候,除了第一个参数之外,后面的参数必须是 PyObject
指针,也就是指向 Python 对象的指针。
你可能想要这样做:
Py_BuildValue("(ii)", (*i).x, (*i).y)
...假设这些坐标实际上是 int
类型的。