On Sun, 2009-11-29 at 18:00 +0100, El Barto wrote: > Hello, > I get a segfault when I do > str <- peekCString ptr > free ptr > return (Just str)
As Thomas says, you've not really given us enough info here. I'll make some guesses and observations anyway :-) > But not when I don't free the C pointer. Are you sure the C code does not also free the memory? That would lead to a double-free which can easily manifest as a segfault. > I also get the same behaviour with ByteString.packCString... That's pretty odd since packCString does not free the C string, it makes a copy. I suppose it could possibly segfault if your C string was not actually null terminated (as C strings must be). There are also variants that do not copy, such as unsafePackMallocCString. See the docs for a description. > Could you please tell me if the memory is correctly freed by GHC when > I don't do it myself? > And how can I specify a custom free function (i.e. xmlFree function in > libxml2)? See the documentation for ForeignPtr. > Maybe I should use a data type with two fields : the String/ByteString > and the ForeignPtr to the CString? Is your C String supposed to be freed using the C free() function, or is it supposed to be freed using xmlFree() or something? Duncan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe