Two possibilities :
Implement your allocated objects as controlled types, and log their addresses as part of the Initialize, Adjust, Finalize routines.
Implement a custom storage pool for them, with custom allocate and deallocate routines which collect the information you need.
Or alternatively, find a way to use the Ada.Containers library to implement your storage type and let IT worry about cleaning up the zombies...