http://mycreature.blog.163.com/blog/static/556317200751811290757/
1.什么是AV ?
AV是Access Violation的缩写,即非法访问内存的意思。
AV错误发生时,你会在开发环境中看到含有类似下方信息的对话框:
Project ProjectName.exe raised exception class EAccessViolation with message 'Access violation at address 00499EA7 in module 'ModuleName.exe'. Write of address 009EBD74'.Process stopped. Use Step or Run to continued.
而在程序界面,你看到的对话框中的信息则类似:
Access violation at address 00499EA7 in module 'ModuleName.exe'. Write of address 009EBD74.
2.为什么发生 ?
AV错误的发生,大都是因为程序试图去访问一块已失效的内存,比如访问的对象或指针未初始化或已被释放等等。(Win32的内存体系在不同的进程间使用了独立的地址空间,所以不必担心会访问到其他的进程中的地址空间而造成破坏,而在Win 16下就有这种潜在的危险。)
3.如何处理 ?
开发时遇到AV错误对话框,应该把对话框中的地址信息记录下来,如上面信息中的00499EA7,然后按确定按钮回到开发环境中,设置地址调试断点(Run/Add Breakpoint/Address Breakpoint) ,在Address中输入记录的地址信息,如$00499EA7。然后你会看到弹出了充满了诸如PUSH,POP,MOV,LEA等可能让你回忆起你在大学里唯一挂科课程的汇编语言的CPU窗口。正常情况下,即使你此时已经把曾经学过的汇编语言的知识都还给了任课老师也没关系,你还可以在窗口中拉动滚动条找找被标记的行出现在哪个文件的哪一行代码调用中,这样你就可以在对应的代码行设置断点,并检查出错原因。当然,也存在有一些问题不能通过这种方式解决,这个时候你只好想其他办法咯……