2009-09-26 88 views
1

我见过很多错误在我的电脑使用寿命的过程中,很多人似乎访问冲突异常调用出路成非可读存储器或00000000/0xFFFFFFFF的。为什么会出现如此多的错误“AccessViolationException”?

什么样的编程错误导致这种情况?当某些事情发生错误时,是否有意让程序崩溃?

+0

任何理由得到近距离投票? – RCIX 2009-09-26 05:36:30

回答

3

绝对不是“有意让程序崩溃,当事情变得非常错误” - 他们只是称它们的语言等价于exit(error_code)...你不想随机跳到内存中某处导致它崩溃。

基本上这意味着程序正在尝试读取操作系统允许的范围之外的内存位置。

这需要某种语言的指针概念,并且指针中的内存地址被设置为错误的值。这可以通过类似忘记设置指针的值是一个int的地址它的指向,而是将其设置为整型持有所致。这可能是因为错误的数据/输入处理 - 你创建一个可以容纳256个字节的数组 - 然后读取265个数据 - 并且恰好在数组之后的指针值位于内存位置,所以现在数据“溢出'数组的末尾位于指针所在的内存位置 - 所以下一次访问该指针时 - 它会充满一些随机数据,但它会像内存地址一样处理。 (有目的地进行破解称为“缓冲区溢出攻击”)。

3

解引用空指针(一个非常常见的错误)可能导致某些语言出现这种情况。

+1

更具体,“在不执行显式null检查任何语言”,这几乎是所有非管理的人往往是。 – 2009-09-26 05:55:45

相关问题