为何出现“非法操作
a[5]=0;
本文链接地址:http://www.oyaya.net/fanwen/view/142123.html
}
大家知道,C语言不检查数组下标越界,该程序编译可通过。执行时引发上述错误,这是因为语句int a[5]只定义了a[0]至a[4],a[5]访问的地址不属于程序的地址空间。要特别注意数组下标,除了上述原因外,它的错误还往往伴随着逻辑错误(符合语法但得不到正确的结果)。
2.未初始化的指针
观察以下程序:
void main()
{
int *a;
*a=0;
}
语句int *a
定义了一个指针,a中存放的只是一个地址,它是一个随机数,极可能指向其它进程的地址空间。对该地址进行读写操作,也极可能引发上述错误。修改的办法是再定义一个整型变量,并将它的地址赋给指针变量a。纯DOS操作系统允许程序对它本身以外的地址进行操作。我在DOS下编程时,曾因忘了初始化指针,而将整个编译器搞得面目全非。
3.栈溢出
这是最不易察觉的一点。我是在编写一个图象处理软件时遇到的,当时真是百思不得其解:
#include<stdio.h>
void func()
《为何出现“非法操作(第3页)》