PyTuple
Python 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
ので、ここで何が問題なのですか?