我有一个使用Python回调的C++库。回调,即PyObject*,存储在UnaryFunction类的一个对象中,构造函数Py峈会增加它。毁灭者Py xdecref它。这就是问题所在。口译员在那个减速机上出错了。在
我的解决办法是不减少它,但这似乎是错误的。 增加/减少一个函数的引用计数的正确方法是什么?更重要的是,为什么解释器在有其他实时引用的情况下尝试GC函数体?在
编辑:在Linux上,我得到的不是segfault的断言fail,它说:
python: Objects/funcobject.c:442: func_dealloc: Assertion 'g->gc.gc_refs != (-2)' failed.
崩溃并不意味着它正在尝试GC一个已使用的对象。这也可能意味着您调用的python代码没有解释器锁。在
在析构函数中调用Py XDECREF会让我觉得你有这样的情况:
简单的解决方案是:
^{pr2}$似乎Py_INCREF实际上并没有增加refcount。在
相关问题 更多 >
编程相关推荐