2 jiajia9492 jiajia9492 于 2016.02.23 14:51 提问

C语言数组越界的含义

听同学说C语言数组越界会导致出错,我试验了下不会,谁能写一个数组越界出错的例子?

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.23 15:06
已采纳

这个不一定能观察到,因为C没有越界检查,你可以这么写:
int a[10];
int i=0;
while (true)
{
a[i++] = i;
}
肯定会报错

u010177010
u010177010   2016.02.23 15:33

越界不就是超过数组的大小,随便写个拷贝就行了

qq_33971941
qq_33971941   2016.02.23 22:03

例如你声明数组a[10],如果访问a[10]就发生越界错误,越界错误的本质是访问了未知内存空间,如果之前此区域内存被使用后,此时访问获得的数据是之前存的数据,至于报错在vc中是随机的。在linux系统下使用gcc编译器直接报段错误

u013505811
u013505811   2016.08.08 19:37

xcode里oc编写数组 如果下标越界了
有可能什么事都不发生

有可能程序直接崩溃
有可能莫名的改变了其他变量

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言数组越界问题实例
很早就接触了++和--,这两个单目运算符。
C语言中的数组越界
因为C语言不检查数组越界,而数组又是我们经常用的数据结构之一,所以程序中经常会遇到数组越界的情况,并且后果轻者读写数据不对,重者程序crash。下面我们来分析一下数组越界的情况: 结合我的另外一篇文章 C语言的内存管理 http://blog.csdn.net/wind19/archive/2010/10/25/5964090.aspx 1) 堆中的数组越界 因为堆是我们自己分配的,
C语言中数组越界访问造成死循环现象
本篇文章纯属娱乐,没太多技术性的东西。只是我觉得还比较有意思,所以记一下!>         大家请看这样一段代码(工具:VC++6.0): #include int main(int argc, char *argv[]) { int i; int arr[10];/* 这里注意循环变量i与数组arr的定义顺序 */ for(i = 0; i <= 10; i++)/*
C语言编译器不检查数组下标越界 困扰的很长时间
C语言的编译器是不检查下标越界的,以前知道这个问题,可是没有想过是什么原因?  总结如下:   1,不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降,所以为了程序的运行效率,C/C++才不检查下标是否越界。   2,不检查下标是为了给程序员更大的空间,也为指针操作带来更
68 C语言数组的静态性、越界以及溢出
C语言数组的静态性、越界以及溢出
内存溢出,内存泄露,内存越界,栈溢出
内存溢出:用户要求系统分配的内存空间超出了系统所能提供的范围,称内存溢出 内存泄露:用户向系统申请内存(new),使用完后没有释放的情况(delete),导致了该块内存不能再被用户使用,也不能被系统调用。我们常说的内存泄露指的是堆泄露 内存越界:使用已申请的内存时,超出了内存的界限。 栈溢出:栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。 ps:典型的,在
关于数组越界的一些保护措施
不知道你有没有发现过即使你有时数组越界也不会引发错误。。。这是为什么呢? 当你在程序中连续申请两块内存时,有没有认真计算过返回的地址加上申请大小是不是等于第二次申请后返回的地址? 这个正是操作系统防止程序员数组访问越界做出的一些调整。。。操作系统每次会在你申请的内存后面保留些许字节来防止这种危险行为。 下面是一个小小的测试 #include #include int main() { i
论C语言中的数组下标越界
在C语言中一般是不会检查数组的下标范围的,例如: #include int main() { int i; int a[3]; a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4; for (i = 0; i <= 3; i++) { printf("%d\n", a[i]); } return 1; } 上面的代码实际上对a[3]
一道有趣的数组越界、循环问题
初来乍到,也是第一次写博客,能与诸君共同学习交流也是极好的。 现在就贴上我们的源代码: #include int main() { int i, a[10]; for (i = 0; i <= 12; i++) { a[i] = 0; printf("Hello World!\n"); } getchar(); return 0; } 原题是问屏幕上
c++语言数组越界try catch判断
#include template class Array {     int i; T *ar; public: Array(int c):i(c){ar=new T[c];} void init(int n,T x){ar[n]=x;} T& operator[](int n) { if(n>=i)throw n; return ar[n];} }; void main(