1

PyTuplePython C-API を使用してオブジェクトを解放する適切な方法は何ですか?

挿入された要素への参照をPyTuple_SetItem盗む」ため、参照カウントのセマンティクスに関して言えば、タプルは多少特殊であることを私は知っています。また、タプル オブジェクトの参照を減らすと、タプル内のすべての要素の参照カウントが減ることもわかっています。

これを念頭に置いて、私は言うのが安全であるべきだと思います:

#include <Python.h>
#include <stdio.h>

int main()
{
    PyObject* tup = PyTuple_New(1);
    PyTuple_SetItem(tup, 0, PyLong_FromLong(100L));

    printf("Ref Count: %d\n", tup->ob_refcnt);
    Py_DECREF(tup);
}

しかし、タプル参照カウントをデクリメントすると、最後の行でセグメンテーション違反が発生します。なぜこれが起こるのかわかりません。Py_DECREF参照カウントの呼び出しの直前にある1ので、ここで何が問題なのですか?

4

1 に答える 1

3

Py_Initialize();mainの先頭に呼び出しを追加して、再試行してください。

于 2011-02-12T14:26:43.673 に答える