One of the more commonplace debugging errors in my own development (Mac, iOS) is EXC_BAD_ACCESS. Despite its commonness, its origin and precise meaning remain mysterious. Google lists many occurrences of the error, but the only explanation I could find is informal and incomplete.
I know that this exception (if that's the proper term for it) means that the code has attempted to access an address to which it does not have read and/or write privileges—the null address, for example, or an address outside of the process's address space. But this is an intuitive interpretation based on my prior experience with virtual memory and protected memory systems. I have never seen EXC_BAD_ACCESS documented anywhere, and indeed I'm not sure "who" is sending me this exception—the CPU, Mac OS, UNIX, the runtime, the debugger?—so I don't know who to ask (that is, what class of documentation to consult). I would like to know, for example, what the "code" that is listed with the exception means. Or another example: what other classes of similar exceptions (presumably also tagged with "EXC_") might also come from the same source?
Where can I find an explanation of EXC_BAD_ACCESS, its codes and general semantics, from an authoritative source? What is the authoritative source—who is actually detecting and throwing the exception?
The only official documentation I've been able to find for EXC_BAD_ACCESS is a Technical Q&A called Finding EXC_BAD_ACCESS bugs in a Cocoa project. It's dated and only confirms what you already know:
This kind of problem is usually the result of over-releasing an object. It can be very confusing, since the failure tends to occur well after the mistake is made. The crash can also occur while the program is deep in framework code, often with none of your own code visible in the stack.
Indeed, it can be very confusing. At least Apple acknowledges that much. :)
来源:https://stackoverflow.com/questions/15254163/where-is-exc-bad-access-documented