[vox-tech] Must one free() in C?

Micah Cowan vox-tech@lists.lugod.org
08 May 2002 21:44:09 -0700


On Wed, 2002-05-08 at 11:34, Mark K. Kim wrote:
> It's not a Linux specific question, for it matters not the answer under
> Linux for Linux frees regardless of one's intervention, but 'tis a valid
> question so I believe...
> 
> Let's say you got a code like this (in C):
> 
>    tmp1 = (int*)malloc(5);
>    tmp2 = (int*)malloc(6);
>    if(!tmp1 || !tmp2)
>    {
>       fprintf(stderr, "Out of memory!\n");
>       exit(1);
>    }
> 
> If tmp1 is allocated (but not tmp2) at the time of exit(1), is it
> guaranteed to be freed by the exiting process?  Or does one must free tmp1
> before exitting?  The answer doesn't really matter on Linux (or most
> modern systems, I suppose)  since it frees memory nonetheless, but is that
> the standard?  The impliciation of requiring calls to free() before
> exitting is enormous -- one would have to keep track of all the allocated
> memory before exitting from any error condition!

It isn't guaranteed, but modern OSses will indeed free the process'
memory after it exits.  But a little guarantee of success isn't better
than a guarantee of failure, in my book.  I do indeed keep track of all
allocated memory. Gives me that feeling of "job well done".

Micah