我正在使用一个有一些内存问题的 C 库。我发现有时它会过早地减少引用计数,从而导致段错误,并设法通过保留对象列表来增加引用计数来解决这个问题。另一方面,我还确定了引用计数过高的特定情况。有没有办法通过有目的地减少引用计数来解决这些情况,从 Python 代码?
我知道这是 hackish,绝不是干净的代码或任何东西,但我必须以某种方式处理有问题的 C 库,这似乎比找出 C 代码中的问题所在更容易(幸运的是它是开放的-source),修复它,然后在我必须支持的所有平台上重新编译它。
我正在使用一个有一些内存问题的 C 库。我发现有时它会过早地减少引用计数,从而导致段错误,并设法通过保留对象列表来增加引用计数来解决这个问题。另一方面,我还确定了引用计数过高的特定情况。有没有办法通过有目的地减少引用计数来解决这些情况,从 Python 代码?
我知道这是 hackish,绝不是干净的代码或任何东西,但我必须以某种方式处理有问题的 C 库,这似乎比找出 C 代码中的问题所在更容易(幸运的是它是开放的-source),修复它,然后在我必须支持的所有平台上重新编译它。
通过 ctypes使用Py_DecRef :
import ctypes
_decref = ctypes.pythonapi.Py_DecRef
_decref.argtypes = [ctypes.py_object]
_decref.restype = None
_decref(a_python_object)