S
skip
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.
Thanks,
Skip
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.
Thanks,
Skip