Ezért szerintem a pointer egy érvényes jó címet tartalmaz.Nem, még csak az sem biztos, hogy pointer-e egyáltalán. A lezárás azért működik, mert arra nem a "fclose"-t használod, hanem a "file_close"-t, ami a "file_open_write" párja. Ez utóbbi kettő egyaránt "var" típusú változót ad vissza és vár paraméterül, és nem is az msvcrt.dll-ben találhatók, hanem a Lite-C runtime-ban. Alapvetően az a baj, az okozza az UB-dat, hogy kevered az interfészeket. 1. vagy használj "file_flush"-t "fflush" helyett, 2. vagy használj "fopen"-t, "fclose"-t "file_open_write" és "file_close" helyett, de ne keverd. Esetleg használj direktben "fflush(NULL)"-t, az minden írásra megnyitott fájlt flush-ol, függetlenül attól, hogy "fopen"-el vagy "file_open_write"-el nyitottad-e meg (nem hiszem, hogy túl sok írásra megnyitott fájlod lenne, szóval nem para).