On Sat, Jun 10, 2017 at 03:21:43AM +0000, Eric Wong wrote: > > So make Jonathan's freez_impl a public API and rename it to > > free_and_null(), perhaps? > > Perhaps... I think it needs to take "void *" to avoid warnings: > > static inline void free_and_null(void *ptrptr) > { > void **tmp = ptrptr; > > free(*tmp); > *tmp = NULL; > } That unfortunately makes it very easy to get it wrong in the callers. Both: free_and_null(&p); and free_and_null(p); would be accepted by the compiler, but one of them causes undefined behavior. Unfortunately using "void **" in the declaration doesn't work, because C's implicit casting rules don't apply to pointer-to-pointer types. -Peff