[vox-tech] Must one free() in C?
Tim Riley
vox-tech@lists.lugod.org
Wed, 08 May 2002 11:59:12 -0700
Freeing memory is (was?) a requirement with DOS based OS's,
and there are utilities out there to check your code for memory leaks.
If this program were ported to DOS/Windows, I would rewrite it as:
if ( ! ( tmp1 = (int *)malloc(5) ) )
{
fprintf( stderr, "Out of memory\n" );
exit( 1 );
}
if ( ! ( tmp2 = (int *)malloc(6) ) )
{
fprintf( stderr, "Out of memory\n" );
free( tmp1 );
exit( 1 );
}
-- Tim Riley
"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!
>
> Thanks in adv!
>
> -Mark
>
> --
> Mark K. Kim
> http://www.cbreak.org/
> PGP key available upon request.
>
> _______________________________________________
> vox-tech mailing list
> vox-tech@lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech