1

在我的计算机使用过程中,我看到了许多错误,其中很多似乎是访问冲突异常调用到不可读内存或 0x00000000/0xFFFFFFFF。

什么样的编程错误会导致这种情况?当出现严重问题时,是否故意让程序崩溃?

4

2 回答 2

3

在某些语言中,取消引用空指针(一个非常常见的错误)可能会导致这种情况。

于 2009-09-26T05:36:33.180 回答
3

绝对不是“故意在事情出错时让程序崩溃” - 他们只是调用他们的语言相当于 exit(error_code) ......你不想随机跳转到内存中的某个地方导致它崩溃.

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

这需要语言中的某种指针概念,并且指针中的内存地址被设置为错误值。这可能是由于忘记将指针的值设置为它指向的 int 的地址,而是将其设置为int 保存的值。这可能是因为错误的数据/输入处理——你创建了一个可以容纳 256 个字节的数组——然后读取了 265 个字节——碰巧指针值位于数组之后的内存位置,所以现在数据'溢出'数组的末尾位于指针所在的内存位置 - 所以下次访问该指针时 - 它充满了一些随机数据,但它被视为内存地址。(故意这样做是为了破解被称为“缓冲区溢出攻击”)。

于 2009-09-26T05:51:45.370 回答