An access violation is NOT due to an instantiation of an object not being freed. Instead, it is due to an attempt to access an object that HAS ALREADY been freed, or that perhaps hasn't been instantiated yet. So, if you did this: MyObject.Free; and you followed that later on with MyObject.Show; then then you will cause an access violation.
Do not set the close action of your MAIN FORM to caFree. When you close your main form, the application will free it. caFree is typically used in MDI (multi document interface) applications, where the child forms are MDI child forms. You will have to search for an object somewhere in your application which is being referenced after you have already freed it. Perhaps on your main form's OnClose event? Good luck.

