我有一个基于 ctypes 的库,它包装了一个有时会分配需要释放的内存的C库。在Linux下,这很简单,因为常见的 glibc 功能已链接到该C库中,我只需在其上调用free()
即可。但是,当我在Windows下访问第三方编译的库时,看起来相同的功能是不可用的。
ctypes.util.find_msvcrt()
似乎很有希望,但即使我在Windows下运行,它也会返回无。我不确定这是否意味着源DLL是使用Microsoft工具链之外的其他东西构建的。
所以,我留下的记忆力是自由的,没有明显的,简单的方法来做到这一点。有没有人有任何想法?
答案 0 :(得分:5)
使用MSVCRT时,您需要确保使用来自同一CRT的相同的 free
/ malloc
对(可以使您的程序运行多个CRT显示器)。您正在处理的库似乎已损坏 - 库应该有一个free
包装器,它会调用free
的正确版本。
换句话说,即使您确实设法找到某种MSVCRT free
,也无法保证它是您想要的那种。