C Dynamic Memory Allocation: malloc(), calloc(), free() & realloc()