Segmentation fault at malloc.c:4232

Michael Schwendt mschwendt at gmail.com
Sat Mar 1 10:20:32 UTC 2008


On Fri, 29 Feb 2008 18:07:22 -0500, Jakub Jelinek wrote:

> On Fri, Feb 29, 2008 at 11:57:53PM +0100, Michael Schwendt wrote:
> > Your theory is false, your code is broken. You really need to free()
> > the line buffer when it is allocated by getline(). But you call getline()
> > in a while-loop without resetting the line pointer to NULL.
> 
> True.
> 
> > Here's the fix:
> 
> But this is not how getline is meant to be used.  This way each getline call
> will allocate a new buffer.  getline is designed so that you can use it in a
> loop with just one allocated buffer, which is realloced by getline when
> needed.  So the right fix would be actually to move the free(line);
> statement after the loop.  Of course if you e.g. want to preserve the buffer
> with the line data, stick pointer to it into some data structure, then you'd
> just do that and clear the pointer so that next getline iteration will
> allocate a fresh buffer.

Yeah, but that explanation and optimisation goes beyond pointing out what
causes the segfault in the implicit malloc. ;) Basically, everything about
how getline can be used is explained in the man page already anyway, i.e.
you either start with a NULL lineptr or rely on the automatic realloc. Here
there's even example code in the man page.




More information about the users mailing list