Re: xfree() -- set ptr to nil (fwd)

Kevin Buettner
2001-02-12T15:21:00Z

On Feb 12, 3:07pm, John R. Moore wrote:

> Whilst fixing xfree() callsI noticed that xfree() itself has a peculiarity
> that needs attention:
>
> The call goes like this:
>
> if (ptr != NULL)
> free(ptr);
>
> Nice, but why not the following:
>
> if (ptr)
> {
> free (ptr);
> prt = NULL);
> }
>
> The latter catches any re-calls to xfree(), unless the compiler sets the
> ptr to nil for one (gcc doesn't appear to). Anyhow, it's a good practice
> to do this anyhow.
>
> Any opinions? The only reason I can think not to is to insure that gdb
> core dumps on succesive xfree() calls to the same pointer (and hence
> insure efficient code, but in that case, why bother with xfree() in the
> first place.

Let me see if I understand you correctly. You'd like to replace

void
xfree (void *ptr)
{
if (ptr != NULL)
free (ptr);
}

with

void
xfree (void *ptr)
{
if (ptr)
{
free (ptr);
ptr = NULL;
}
}

right?

If so, how will this work? ``ptr'' is a local variable and will not
be modified outside the scope of xfree().

What you have in mind could be done with a macro and I have seen
this done in other programs. (But rather than insuring that gdb
core dumps on successive xfree() calls, it instead causes gdb to
core dump when attempting to use an already freed-and-nulled pointer.)

Kevin