free() 함수 사용시 NULL하는 습관을 가지자!!!
#define xfree(p) assuredfree(&p) void assuredfree(void **p) { free(*p); *p=NULL; } int main() { void *p; p = (void*)malloc(100); printf("%p\n", p); xfree(p); printf("%p\n", p); } Q 7.21 왜 free()를 부른 다음에 포인터가 널이 되지 않는 걸까요? Answer free()를 부르면 이 함수에 전달된 포인터가 가리키고 있던 메모리가 해제됩니다. 그러나 이 포인터 자체의 값은 변경되지 않고 남아있습니다. 왜냐하면 C 언어는 인자를 전달할 때, ‘pass-by-value’ 개념을 쓰기 때문입니다. 따라서 함수가 (이 경우 free()) 인자로 전달된 변수의 값을 ..