为何出现“非法操作
{
int a[300000];
printf("Now Call Functions");
}
void main()
{
func();
}
程序运行时,系统在栈中为局部变量开辟空间。局部变量有很多好处,但是必须保证栈的空间足够。该程序定义了长为300000的整数数组局部变量,它超出了栈的大小。通过修改数组的长度,看是否会出现“非法操作”,得知我所用的系统(Windows NT4)在缺省条件下,栈的大小在200000至300000之间。另外,使用递归不当,也会引起栈的溢出。解决的办法一般并非将局部变量该为全局变量(尽管实际用到的内存再大,Windows也能支持,但从效率来说一般不这样做),而是使用动态分配内存技术,从“堆”中分配内存。将语句int a[300000] 改为 int a=new int[300000],然后仍然a看成长为300000的数组使用。
最后提醒大家,编写程序后,编译运行前存盘,做到“有备无患”。
  《为何出现“非法操作(第4页)》