Correct. You can't dispose memory that is allocated in init().
This isn't a problem since the various init() functions are only called once from Sys.init(). When you reset the computer and rerun the program Memory.init() [re]initializes the heap so the leftover allocated blocks are effectively disposed at that time.
If leaving these objects dangling bothers you, it's your OS! Add
function void final()
to your OS classes that have an init() that allocates memory. Call all these final()s when Main.main() returns to Sys.init().
Thinking as I type... Should the final()s should be called in Sys.halt()? For Sys.halt() to be useful as a debugging abort like C/Java's 'assert' it shouldn't mess with the heap... Maybe it would be better for halt() to call the free()s and add a Sys.abort() that doesn't call the free()s.
--Mark