Thanks Stefan! That's what I suspected. The fast reply is much appreciated (as is Cython in general :))
On Wed, Apr 29, 2009 at 9:55 AM, Stefan Behnel <[email protected]> wrote: > > Jack Stahl wrote: > > Quick question. If I want to return a char * from Cython to Python as a > > string, should I be freeing the original char * or not? In other words, > > when Cython does the implicit conversion from char * ---> string, does it > > create a Python object and strcpy the char * into its data, or does it > copy > > the pointer? > > It creates a copy that is owned by the str/bytes object. > > > > Here's some code to make this clearer: > > > > cdef class MyStringHolder: > > > > cdef char *my_str > > > > ... > > > > cpdef add_to_set(object set): > > // Is this necessary or is this a memory leak? > > cdef char * str_cpy = <char*>malloc(strlen(my_str) + 1) > > strcpy(str_cpy, my_str) > > > > // Should this just be set.add(my_str)? > > set.add(str_cpy) > > Yes, passing my_str should be enough (unless what you want is actually a > unicode string, in which case you need to decode it). > > Stefan > > _______________________________________________ > Cython-dev mailing list > [email protected] > http://codespeak.net/mailman/listinfo/cython-dev >
_______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
