首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

诚信请问C++数组越界有关问题

2012-02-09 
诚信请教C++数组越界问题这个程序为什么能够运行,对于数组来说为什么不越界啊??#includeiostream.h intw

诚信请教C++数组越界问题
这个程序为什么能够运行,对于数组来说为什么不越界啊??
#include   "iostream.h "

int   wholeSequ[8];//就是这个地方,如果不是全局变量的话就会出错

void   iniSequ()
{
        wholeSequ[2000]=-2;

}

void   main()
{
iniSequ();
cout < <wholeSequ[2000] < <endl;
}

[解决办法]
fish6344和medie2005两位说的很对
首先:在c++中数组只在初始化的时候检查越界情况,比如char ch[3]={ 'a ', 'b ', 'c ', 'd '};
在运行中数组是不进行越界诊断的,这个主要是出于效率问题,对于ch[3]在c++中,编译器首先得到数组的首地址,然后再根据[]号内的数字对其进行偏移,但是偏移的结果是否越界,c++编译器并不对其诊断,所以这个只能由程序员自己注意。
楼主的程序之所以没有出现问题,有可能只是碰巧而已,如果wholeSequ[2000]也就是wholeSequ所在的地址便宜2000*sizeof(int)个字节后是否是已经分配的地址,在运行的时候是不可知的,所以wholeSequ[2000]=-2;很危险,随便更改不属于自己的内存地址上的值,将引起不可以预测的行为,也许你的系统会崩溃,也许你这一次运行正常,下一次运行就不一定了,所以这种程序是很不安全的。

热点排行