C++模块中创建PyTuple导致崩溃

0 投票
1 回答
1858 浏览
提问于 2025-04-15 16:19

我在写的一个C++模块中遇到了一些麻烦,想要返回一个包含坐标的元组(tuple of tuples)。我觉得代码看起来没问题,dirty列表里有两个Coord,所以len的值是2,列表中这两个项的xy值分别是0,00,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 类型的。

撰写回答