3 ms·
Good point. But it seems like it would require usage like this: int* p = malloc(sizeof(int)); FREE(&p); What if we instead define the macro like this:
by Thorrez 6y ago
Good point. But it seems like it would require usage like this:
int* p = malloc(sizeof(int));
FREE(&p);
What if we instead define the macro like this:
#define FREE(ptr) do { \
__typeof__(ptr)* const __x = &(ptr); \
free(*__x); *__x = NULL; \
} while(0)
Then make usage slightly shorter, as well as more similar to free():
int* p = malloc(sizeof(int));
FREE(p);
- btrask 6y agoTaking a pointer-to-pointer is intentional to make it clear that the pointer will be modified. That's actually the most important difference from nn3's version IMHO.