如何创建Python无法释放的缓冲区?
我需要从python中调用C库中的函数,这将释放()参数。 因此,我尝试创建_string_buffer(),但看起来Python稍后会释放此缓冲区,这将使缓冲区被释放两次 我在网上读到Python会重新计算缓冲区,并在没有引用时释放它们。那么,我怎样才能创建一个python以后不会关心的缓冲区呢?谢谢 例如:如何创建Python无法释放的缓冲区?,python,c,buffer,ctypes,free,Python,C,Buffer,Ctypes,Free,我需要从python中调用C库中的函数,这将释放()参数。 因此,我尝试创建_string_buffer(),但看起来Python稍后会释放此缓冲区,这将使缓冲区被释放两次 我在网上读到Python会重新计算缓冲区,并在没有引用时释放它们。那么,我怎样才能创建一个python以后不会关心的缓冲区呢?谢谢 例如: 我用:lib=cdll.LoadLibrary(“libxxx.so”)加载dll,然后用:path=create\u string\u buffer(topdir)和lib.load(
我用:
lib=cdll.LoadLibrary(“libxxx.so”)
加载dll,然后用:path=create\u string\u buffer(topdir)
和lib.load(path)
调用函数。但是,libxxx.so中的load函数将释放其参数。稍后,Python将释放“path”,因此它将被释放两次按给定顺序尝试以下操作:
create\u string\u buffer()
。如果可以控制C函数的行为,请将其修改为不释放缓冲区()ctypes
调用malloc()
,但这会破坏内存管理的所有良好实践。把它当作最后的手段。几乎可以肯定,这将在以后的某个时候引入难以发现的bug发布您的示例代码以及它的错误。问题还不清楚。我用:
lib=cdll.LoadLibrary(“libxxx.so”)
加载dll,然后用:path=create\u string\u buffer(topdir)
和lib.load(path)
调用函数。但是,libxxx.so中的load函数将释放其参数。稍后Python会释放“path”,因此它会被释放两次。为了让人们能够更轻松地回答您,问题应该包含所有需要的信息——编辑问题以添加它,而不是将它放在人们会错过的注释中。谢谢,我正在尝试不修改库。由于此库只有三个函数:load
、unload
和request
,并且首先调用load
函数,我认为这是一个设计问题。。。也许我会尝试将引用保存在字典中,因为这似乎比调用malloc()
。。。。