On Sat, 1 Mar 2008 06:10:55 +0800, hanpingtian@xxxxxxxxx wrote: > I just found out when I comment out the line 27, which calls free() to > free the line got from > getline(), the program doesn't segmentation fault. > > But the manual of getline() tells us to free the "*lineptr" when it is > NULL before call getline(). It's the situation in my program. > > With this src.txt: > (x = 1) > 1 > it reports "double free or corruption" when doesn't comment line 27: > > *** glibc detected *** ./compiler: double free or corruption (!prev): 0x08c0d2d8 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. Here's the fix: --- compiler.c~ 2008-02-29 07:06:46.000000000 +0100 +++ compiler.c 2008-02-29 23:55:41.000000000 +0100 @@ -25,6 +25,7 @@ } free(line); + line = NULL; STACKfree(); }