C\C++中数组元素下标越界可能引起的问题

 

作者:onlinewan

关键字:C\C++  数组   越界

       数组是类型相同的对象的序列,其中的对象称为数组元素。也可以将数组想像成一连串的用下标值编号的相邻存储区。

       可能在某些编程语言中,一个下标变量是不允许超出数组定义中所设的界限的。但是在C和C++中,数组是没有这种安全措施的。下面先来看看数组下标越界的几种异常结果。

       例1,访问没有分配给数组的内存空间。

       int main ()

       {

             const int SIZE = 4;

             int a[SIZE] = {12,40,45,10};

             for (int i = 0; i<5 : i++)

                 cout << "\t a[" << i << "] = " << a[i] << endl;

       }

       运行结果如下:

             a[0] = 12

             a[1] = 40

             a[2] = 45

             a[3] = 10

             a[4] = 12358   

       上面的结果中a[4]访问了不属于数组的内存空间,读取了一个无用的值,这个值是以前使用这个内存单元时保存的值。大家可能会说,这有什么大不了的,这不会影响什么的呀。不急,下面再看个例子。

       例2,访问数组的一个不存在的下标元素时无意中改变了一个变量的值。

       int main ()

       {

             int a[] = {10,12,31};

             int x = 20;

             cout << "x = " << x << endl;

             a[3] = 50;  //给一个不属于本数组的一个内存空间赋值,从而改变了变量x的值。

             cout << "x = " << x <<endl;

       }

       运行结果:

             x = 20

             x = 50

       看完上面的例子,应该知道数组元素下标越界带来的严重后果了吧。不过即使这样,程序还是可以正常运行。下面再看个例子,它引起的后果会引起程序不能正常运行。

       例3,由于数组下标太大而引起程序崩溃。

       int main ()

       {

             const int SIZE = 4;

             int a[] = {10,20,30};

             int x = 5;

             cout << "x = " << x << endl;

             a[200] = 88;

             cout << "x = " << x << endl;

             cout << a << endl;

        }

       上面的程序是无法正常运行的。我先不说出原因,还让大家回忆一下,我们是不是在操作电脑的时候,经常会遇到这样的情况:突然弹出一个警告框,说此内存地址不能写或不能读。这样的情况就会发生的上面的程序运行过程中。

       有关C++中数组元素下标越界可能引起的问题就说这么多吧,通过上面的例子,我们应该知道在使用数组时,要特别注意这个问题,因为它很可能会导致严重的后果。

posted on 2007-03-23 11:17 阿刚 阅读(1496) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(1)

随笔档案

文章档案

C++ BBS

C++ FAQ

C++ WEBSITE

搜索

最新随笔

最新评论

阅读排行榜

评论排行榜