Memory errors are difficult to find. Usually the source of the problem occurs long before the unexpected behavior or crash. When the system deallocates an object, that memory gets reused for some other object or primitive variable. The worst cases are when the memory does the following:
Is not reused until after a few calls to the object and then is changed to something else. Everything appears to be working even though there is a lurking problem.
Is reused for the same kind of object that likely has different values.