You don't have to free anything when you exit. You to want to keep an eye on peak memory and peak objects and code to avoid issues there. (the view memory screen under "file" in the sim)
For the most part you don't need to worry about deallocating objects. MonkeyC uses reference counting. When an object is allocated, it gets an initial reference count of 1. When another reference is made to that object, the reference count is incremented and when a reference goes out of scope the reference count is decremented. When the last reference goes away and the reference count goes to 0, it is deallocated automatically.
One thing that you may need to be conscious of is reference cycles. The case where an object (object A) references another object (B), and then the second object (B) maintains a reference to (A). The reference s may direct or indirect, but situations like this can lead to memory leaks or memory in use at program termination. They will result in errors when you exit the simulator, so it should be pretty obvious if you are running into these situations.
Even so, when an application exits, the entire memory space for the application is given back to the system. Once the app has exited it doesn't matter if you had not yet deallocated memory inside your application.