[cffi-devel] foreign-free not freeing memory not allocated by CFFI

Luke Crook luke at balooga.com
Mon May 23 06:19:23 UTC 2011


On Sun, May 22, 2011 at 2:10 PM, Luís Oliveira <luismbo at gmail.com> wrote:

> On Sat, May 21, 2011 at 1:21 AM, Luke Crook <luke at balooga.com> wrote:
> > I think the problem is that CFFI does not allow memory to be freed if
> that
> > memory has not also been allocated using CFFI.
>
> Indeed, you shouldn't call FOREIGN-FREE on pointers to memory not
> allocated by FOREIGN-ALLOC. You should be able to (defcfun free ...)
> and use that.
>
>
> > In my code below, a new 'sdl-version' struct is returned by
> > (sdl-mixer-cffi::linked-version). The error seems to occur when I try to
> > free the struct at the end of the function using foreign-free.
>
> However, under SBCL FOREIGN-FREE is equivalent to free() -- not sure
> about CCL. According to SDL_Mixer's documentation,
> Mix_Linked_Version() returns a const pointer, so it seems that the bug
> here is that you're trying to free() non-malloc()ed memory.
>
>
Thank you for pointing that out. I will fix that bug in my code.

 /* rcg06192001 get linked library's version. */

   139 <http://hg.libsdl.org/SDL_mixer/file/4b699c9a269d/mixer.c#l139>
const SDL_version *Mix_Linked_Version(void)

   140 <http://hg.libsdl.org/SDL_mixer/file/4b699c9a269d/mixer.c#l140> {

   141 <http://hg.libsdl.org/SDL_mixer/file/4b699c9a269d/mixer.c#l141>
	static SDL_version linked_version;

   142 <http://hg.libsdl.org/SDL_mixer/file/4b699c9a269d/mixer.c#l142>
	SDL_MIXER_VERSION(&linked_version);

   143 <http://hg.libsdl.org/SDL_mixer/file/4b699c9a269d/mixer.c#l143>
	return(&linked_version);

144 <http://hg.libsdl.org/SDL_mixer/file/4b699c9a269d/mixer.c#l144> }

FYI; Lispworks doesn't complain about freeing the pointer.

-Luke
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20110522/26e70f65/attachment.html>


More information about the cffi-devel mailing list