我有一个使用 Python 回调的 C++ 库。回调,即 PyObject*,存储在 UnaryFunction 类的对象中,构造函数 Py_INCREF 对其进行引用。析构函数 Py_XDECREFs 它。那就是问题所在。解释器在该 DECREF 上出现段错误。
我的解决方案是不 DECREF 它,但这似乎是错误的。INC/DEC 函数引用计数的正确方法是什么,更重要的是,为什么解释器在有其他实时引用时尝试 GC 函数体?
编辑:在 Linux 而不是段错误上,我得到一个断言失败,上面写着:
python: Objects/funcobject.c:442: func_dealloc: Assertion 'g->gc.gc_refs != (-2)' failed.