为何出现“非法操作
图:点击了“详细资料”后的对话框
此时如果点击“详细资料”,对话框扩大窗口,给出了寄存器的值,但是一般人看不明白;而如果点击“调试”,它将调用Visual C++或Delphi之类的安装在系统中的编译器,并在编译器中显示程序的汇编码,更是让人头大一圈;若点击“关闭”,则会将内存中的相关数据都丢弃(很多时候这些数据是有用的),非常可惜。
引起Windows弹出此对话框的原因是内存出错。内存质量不好,不稳定,某些数据无端的改变,当然被认为是“非法操作”。这里讨论的是软件特别是自己编写的小程序是如何引起错误的。Windows 9X中,不必关心内存模式、地址转换、64K的代码段和数据段,因为地址和内存都放在线形的
32位内存空间中。每个应用程序都可“看见”4GB的线形地址空间,其中最开始的4MB由操作系统保留,剩下的不足2GB的空间属于应用程序私有空间。要强调的是,在4MB 到2GB之间的非保留空间是完全私有的。每个进程都可有自己私有的地址空间,而且与其他进程的地址空间是完全无关的。利用处理器的页映射能力,操作系统可为每个进程提供独立的从逻辑地址到物理内存(RAM或分页文件)的映射,使一个进程的地址空间对另一个进程完全不可见。编程时,若一个进程(程序)访问了它的地址空间外的地址,Windows 9X就会弹出上述对话框。具体有以下几个原因:
1.数组下标越界
观察以下程序:
#include<stdio.h>
void main()
{
int a[5];
《为何出现“非法操作(第2页)》