This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]