Here's the method I was using. Note that tmp_char_ptr is of type c_void_p. This should avoid the memory leak, assuming I am interpreting the semantics of the cast correctly. Is there a cleaner way to do this with ctypes?
def get_prop_string(self, prop_name): # Have to work with c_void_p to prevent ctypes from copying to a string # without giving me an opportunity to destroy the original string. tmp_char_ptr = _get_prop_string(self._props, prop_name) prop_val = cast(tmp_char_ptr, c_char_p).value _string_destroy(tmp_char_ptr) return prop_val On Wed, Apr 21, 2010 at 3:15 PM, Brendan Miller <catph...@catphive.net> wrote: > I have a function exposed through ctypes that returns a c_char_p. > Since I need to deallocate that c_char_p, it's inconvenient that > ctypes copies the c_char_p into a string instead of giving me the raw > pointer. I believe this will cause a memory leak, unless ctypes is > smart enough to free the string itself after the copy... which I > doubt. > > Is there some way to tell ctypes to return an actual c_char_p, or is > my best bet to return a c_void_p and cast to c_char_p when I'm reading > to convert to a string? > > Thanks > Brendan > -- http://mail.python.org/mailman/listinfo/python-list