Python コールバックを使用する C++ ライブラリがあります。コールバック、つまり PyObject* はクラス UnaryFunction のオブジェクトに格納され、コンストラクタ Py_INCREF がそれを呼び出します。デスタクタ Py_XDECREF はそれを参照します。それが問題です。インタープリターは、その DECREF でセグメンテーション違反を起こします。
私の解決策は、DECREFしないことですが、それは間違っているようです。関数の参照カウントを INC/DEC する適切な方法は何ですか? さらに重要なことに、他のライブ参照があるときにインタープリターが関数本体を GC しようとするのはなぜですか?
編集: Linux では、セグメンテーション違反の代わりに、次のようなアサーション失敗が発生します。
python: Objects/funcobject.c:442: func_dealloc: Assertion 'g->gc.gc_refs != (-2)' failed.