From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kevin Buettner To: "John R. Moore" , Subject: Re: xfree() -- set ptr to nil (fwd) Date: Mon, 12 Feb 2001 15:21:00 -0000 Message-id: <1010212232133.ZM10698@ocotillo.lan> References: X-SW-Source: 2001-02/msg00179.html 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