首页 > 其他 > 详细

Homework 1

时间:2017-02-27 21:37:15      阅读:143      评论:0      收藏:0      [点我收藏+]

      令我印象最深的bug是C++中经常遇到的数组访问越界bug。

我们通过数组的下标来得到数组内指定索引的元素。这称作对数组的访问。

如果一个数组定义为有n个元素,那么,对这n个元素(下标为0 到 n-1的元素)的访问都合法,如果对这n个元素之外的访问,就是非法的,称为“越界。

数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。

因此,当你的下标过大时,访问到的内存,就不再是这个数组“份内”的内存。你访问的,将是其它变量的内存了。

令人苦恼的是,它并不会造成编译错误!就是说,C,C++的编译器并不判断和指出你的代码“访问越界”了。一个明明是错误的东西,就这样“顺利”地通过了编译。

因此,一旦出现这种错误,你必须手动找到错误的位置,这很令人苦恼。

数组访问越界在运行时,它的表现是不定的,有时似乎什么事也没有,程序一直运行(当然,某些错误结果已造成);有时,则是程序一下子崩溃。因此在使用数组时,一定要在编程中判断是否越界以保证程序的正确性。

常见的错误就是数组的size值和下标访问值弄错,数组的下表是从0开始的,最大的访问值是size-1。

解决办法:

由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题。

解决问题的方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。

举例:

#include<stdio.h>

void PutArray(int *p, int length)

{

   // 在此判断入口参数p和length的有效性

   ……

   for(int i=0;i<length;i++)

   printf("%d/t",p[i]);

}

void main()

{

  int a[3]={2,4,6} ;

  printf("数组a[3]调用函数PutArray的结果为:/n");

  PutArray(a, sizeof(a)/sizeof(a[0]));

}

Homework 1

原文:http://www.cnblogs.com/wzj-study/p/6476130.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!