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