Releasing malloc'd memory using ctypes?
Diez B. Roggisch
deets at nospam.web.de
Mon Dec 24 09:52:16 EST 2007
skip at pobox.com schrieb:
> I am starting to experiment with ctypes. I have a function which returns a
> pointer to a struct allocated in heap memory. There is a corresponding free
> function for that sort of struct, e.g.:
>
> from ctypes import *
>
> cdll.LoadLibrary("libthing.so")
> c_thing = CDLL("libthing.so")
>
> class THING(Structure):
> _fields_ = [("name", c_char_p),
> ("value", c_int)]
>
> get_thing = c_thing.get_thing
> get_thing.restype = POINTER(THING)
> free_thing = c_thing.free_thing
>
> So I call get_thing() and get back this ctypes wrapper for a pointer to a
> thing. I can extract the name and value elements from the thing instance
> just fine:
>
> thing_p = get_thing()
> thing = thing_p.contents
> print thing.name, "=", thing.value
>
> Now I need to call free_thing. What do I pass it? thing_p? Some attribute
> of thing_p? Something else altogether? The ctypes module docs seem to be
> strangely silent on the question of freeing heap memory which you've
> received from the underlying library's functions.
You simply declare free by loading libc (I'm a unix-guy, Windows will
have an equivalent) as library and then declaring it. And of course it
gets a void-pointer, so you have to cast you pointer to void* - as you'd
have in C (or get a warning).
Diez
More information about the Python-list
mailing list