求助:访问数组中已经定义好的数据却提示数组越界

求助:访问数组中已经定义好的数据却提示数组越界,第1张

数组(指针)越界访问,是指使用了超过有效范围的偏移量。

如只分配了10个元素的空间,但是访问了第11个元素,就属于越界。

当出现越界时,由于无法得知被访问空间存储的内容及功能,所以会出现不可预知后果。可能程序崩溃,可能运算结果非预期,也可能完全没有影响。

在编程时要避免指针越界访问,对于用变量作为参数访问元素时,需要控制好变量范围。如果变量值由外部因素决定,那么访问前先对合法性做判断,防止越界。

一、什么是数组访问越界? 我们通过数组的下标来得到数组内指定索引的元素。这称作对数组的访问。 如果一个数组定义为有n个元素,那么,对这n个元素(下标为0 到 n-一的元素)的访问都合法,如果对这n个元素之外的访问,就是非法的,称为“越界。 数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存,就不再是这个数组“份内”的内存。你访问的,将是其它变量的内存了。 二、访问越界会出现什么结果? 首先,它并不会造成编译错误!就是说,C,C++的编译器并不判断和指出你的代码“访问越界”了。一个明明是错误的东西,就这样“顺利”地通过了编译。数组访问越界在运行时,它的表现是不定的,有时似乎什么事也没有,程序一直运行(当然,某些错误结果已造成);有时,则是程序一下子崩溃。因此在使用数组时,一定要在编程中判断是否越界以保证程序的正确性。 常见的错误就是数组的size值和下标访问值弄错,数组的下表是从0开始的,最大的访问值是size-一。 三、解决办法 由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题,解决问题方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。 举例: #include void PutArray(int *p, int length) {// 在此判断入口参数p和length的有效性……for(int i=0i<lengthi++)printf("%d\t",p[i])} void main() { int a[三]={二,四,陆} printf("数组a[三]调用函数PutArray的结果为:\n") PutArray(a, sizeof(a)/sizeof(a[0]))


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11856598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存