¿sale () la memoria asignada libre tanto en _SUCCESS como en _FAILURE?

Este es un breve fragmento de código, con dos llamadas aexit(3) en caso de fallo. ¿Estas llamadas desasignan la memoria asignada por malloc? La búsqueda en Google dice una vez que lo hace, y aún más, no lo hace ...

¿Debo añadir free ()?

También: cual es mejorif (!word)(también funcionaría para, por ejemplo, word == 0, que es diferente de word == NULL, así que supongo que está mal) oif (word == NULL) ?

char *word = NULL, *temp = NULL;
    word = (char *)malloc(sizeof(char) * size);

    if (!word) {            /* or maybe rather it should be (word == NULL)  */
        perror("malloc fail");
        if (fclose(fp)) {
            perror("fclose fail");
            exit(3);                            /* exit without free ? */
        }
        exit(3);                                /* exit without free ? */
    }

¡Gracias por adelantado!

Respuestas a la pregunta(4)

Su respuesta a la pregunta