Hacker News new | ask | show | jobs
by Yacoby 4179 days ago
Totally worse. free(NULL) preforms no action so there is no requirement for the if statement. ;)
2 comments

but it probably costs a stack frame right? ;)
Except free(NULL) behavior is undefined.

Have you ever bothered to read ANSI C specification?

EDIT: Well it appears my recollections of ANSI C have faded away and free(NULL) was actually defined in ANSI C89.

> Except free(NULL) behavior is undefined.

> Have you ever bothered to read ANSI C specification?

You mean the one that states

> The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs.

?

Wrong, it's defined: http://stackoverflow.com/questions/6084218/is-it-good-practi...

You didn't say which version of the ANSI C specification.

> You didn't say which version of the ANSI C specification.

Which does not matter because all of them clearly define the behavior of free(NULL). The language has been the same since C89[0]:

> The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs.

I'm guessing pjmlp confused free(NULL) which is defined and double free which is UB:

> if the argument does not match a pointer earlier returned by the calloc , malloc , or realloc function, or if the space has been deallocated by a call to free or realloc , the behavior is undefined.

and didn't "bother to read the ANSI C specification" because he was so certain of what he misremembered.

[0] http://port70.net/~nsz/c/c89/c89-draft.html#4.10.3.2

> and didn't "bother to read the ANSI C specification" because he was so certain of what he misremembered.

Yes, it appears my recollections of ANSI C have faded away.

It's been defined ever since the original ANSI C, which said this in the definition of free():

  If ptr is a null pointer, no action occurs.