PythonのCTypesを使用する場合は、Python側でc-structureを複製できる構造体と、メモリアドレス値からソフォスティックなPythonオブジェクトを作成するPOINTERSオブジェクトがあり、参照によってオブジェクトを渡すために使用できます。前のCコード。Pythonオブジェクトが削除されると、Ctypes StructuresとPOINTERSは自動的にメモリを解放しますか?
ドキュメンテーションや他の場所では見つけられなかったのは、Cコードから戻ってくるポインタから逆参照された構造クラスを含むPythonオブジェクト(構造体のC関数を割り当てたC関数)それ自体が削除されます。元のC構造のメモリは解放されていますか?それをする方法でない場合は?
さらに、構造体にポインタ自体が含まれている場合、C関数によって割り当てられた他のデータにはどうなりますか? Structureオブジェクトの削除によってPointers onitsメンバーが解放されますか? (私はそうだと思う)Else - それをやろうとする?構造体のポインタのためにPythonからシステムを "フリー"にしようとすると、私のためにPythonがクラッシュします。
言い換えれば、私はCの関数コールで埋め、この構造を持っている:class PIX(ctypes.Structure):
"""Comments not generated
"""
_fields_ = [
("w", ctypes.c_uint32),
("h", ctypes.c_uint32),
("d", ctypes.c_uint32),
("wpl", ctypes.c_uint32),
("refcount", ctypes.c_uint32),
("xres", ctypes.c_uint32),
("yres", ctypes.c_uint32),
("informat", ctypes.c_int32),
("text", ctypes.POINTER(ctypes.c_char)),
("colormap", ctypes.POINTER(PIXCOLORMAP)),
("data", ctypes.POINTER(ctypes.c_uint32))
]
を、私はそれがPythonコードからアップ使用しているメモリを解放します。