Zombie processes and zombie objects are totally unrelated. Zombie processes are when a parent starts a child process and the child process ends, but the parent doesn’t pick up the child’s exit code. The process object has to stay around until this happens – it consumes no resources and is dead, but it still exists – hence, ‘zombie’.
Zombie objects are a debugging feature of Cocoa / CoreFoundation to help you catch memory errors – normally when an object’s refcount drops to zero it’s freed immediately, but that makes debugging difficult. Instead, if zombie objects are enabled, the object’s memory isn’t instantly freed, it’s just marked as a zombie, and any further attempts to use it will be logged and you can track down where in the code the object was used past its lifetime.
EXEC_BAD_ACCESS is your run-of-the-mill “You used a bad pointer” exception, like if I did:
(*(0x42)) = 5;