大家好,又见面了,我是你们的朋友全栈君。
什么是数组访问越界?
所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一。
在 C 语言中,数组必须是静态的。换而言之,数组的大小必须在程序运行前就确定下来。由于 C 语言并不具有类似 Java 等语言中现有的静态分析工具的功能,可以对程序中数组下标取值范围进行严格检查,一旦发现数组上溢或下溢,都会因抛出异常而终止程序。也就是说,C 语言并不检验数组边界,数组的两端都有可能越界,从而使其他变量的数据甚至程序代码被破坏。
因此,数组下标的取值范围只能预先推断一个值来确定数组的维数,而检验数组的边界是程序员的职责。
一般情况下,数组的越界错误主要包括两种:数组下标取值越界与指向数组的指针的指向范围越界。
如何避免?
由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题,解决问题方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。
举例
代码语言:javascript复制#include<stdio.h>
void PutArray(int *p, int length)
{
// 在此判断入口参数p和length的有效性
……
for(int i=0;i<length;i )
printf("%d/t",p[i]);
}
int main()
{
int a[3]={
2,4,6} ;
printf("数组a[3]调用函数PutArray的结果为:/n");
PutArray(a, sizeof(a)/sizeof(a[0]));
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186862.html原文链接:https://javaforall.cn