You're right. Eiter way, it's a compromise.

    displays = (CGDirectDisplayID*) _glfwCheckedCalloc(monitorCount, sizeof(CGDirectDisplayID));
    ...
    _glfwFree(displays);

vs.

    displays = (CGDirectDisplayID*) _glfwCheckedCalloc(monitorCount, sizeof(CGDirectDisplayID));
    ...
    free(displays);

First one looks nicer if you're already familiar with the _glfw* memory functions.

Second one looks less consistent, but uses less custom functions. It's less ambiguous how to write new code.