c语言-C语言数组越界的含义

问题描述

C语言数组越界的含义

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

解决方案

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

解决方案二:

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

解决方案三:

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

时间: 2024-10-01 15:19:40

c语言-C语言数组越界的含义的相关文章

c语言-C语言二维数组下标越界--却能给越界的下标赋值 和输出

问题描述 C语言二维数组下标越界--却能给越界的下标赋值 和输出 编译器:dev-c++ int iArray[3][4]; iArray[3][4]=1000; printf("%d",iArray[3][4]); 改变 iArray[3][4]的值为1000 输出的结果仍然为1000 请问这个是什么原因呢? 我是直接给越界的下标进行了赋值 以前以为只要是下标越界了 输出的都是无意义的数字 其实那是因为没有给越界的下标赋值 对吗 越界的下标为什么还能正常使用呀 解决方案 使用越界的数

二维数组与指针-C语言二维数组中的*(p+1)的确切含义

问题描述 C语言二维数组中的*(p+1)的确切含义 各位大师们,烦请指教一二吧.如果是在一维数组中,*(p+1)表示p+1这个地址空间或空间中的值,那么在二维数组中,p+1是指向a[1]*(p+1)是a1这个地址中的值啊?可是为什么会是地址呢? 解决方案 二维数组其实是一个小戏法,本质上还是一维数组--二维下标连续构成的数组又连续构成第一维下标.你可以像遍历一维数组那样遍历它 解决方案二: 其实a[2][3]的调用可以看成是两个调用,首先是对a进行[2]操作,然后再对a[2]的返回值进行[3]操

c语言-谁来帮我看看这代码哪里错了,只是简单的C程序(折半搜索+快速排序),题库上说我数组越界?求帮忙看看

问题描述 谁来帮我看看这代码哪里错了,只是简单的C程序(折半搜索+快速排序),题库上说我数组越界?求帮忙看看 #include #define MAXN 500+10 int n,m; long int a[MAXN],b[MAXN],c[MAXN],d[MAXN],cd[MAXN*MAXN]; void sort(long int a[],int xx,int yy) { if(xx>=yy)return; int x=xx,y=yy,k=a[xx]; while(x { while(a[y]

C语言中的数组和指针汇编代码分析实例

  这篇文章主要介绍了C语言中的数组和指针汇编代码分析实例,本文用一则C语言例子来得到对应的汇编代码,并一一注解每句汇编代码的含义,需要的朋友可以参考下 今天看<程序员面试宝典>时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下C语言背后的汇编,可能很多人只注重C语言,但在实际应用当中,当出现问题时,有时候还是通过分析汇编代码能够解决问题.本文只是为初学者,大牛可以飘过~ C源代码如下: 代码如下: #include "stdafx.h" int

二维数组-关于C语言的指针数组的问题

问题描述 关于C语言的指针数组的问题 老师说过 传递一个二维数组时 必须指定 第二维的 个数 才能正确索引 数组1维+1的位置 函数参数传递 都是写成这样 abc(int* array[10]) 但是看到main函数的 参数确是 int main(int argc, char* argv[], char* env[]) 这样写 能索引argv+1 的位置吗? 解决方案 当然可以,C语言是一种简陋和原始的语言,它简陋的程度对于用惯了高级编程语言的人来说匪夷所思,比如你完全可以越界访问数组,至于结果

c语言-C语言指针指向数组问题

问题描述 C语言指针指向数组问题 #include int main(){ int a[5]; int *p,i; printf("please enter ten numbers:"); for(i=0;i<5;i++){ scanf("%d",&a[i]); } for(p=a;p<(a+5);p++) scanf("%d",*p); printf(" "); return 0; } 代码如图,是课本上

c语言-如何在C语言中以数组指针作为形参输出数组

问题描述 如何在C语言中以数组指针作为形参输出数组 #include ""stdafx.h""void cmdsend(unsigned int * info);int main(){ unsigned int senddata[5]; senddata[0] = 8; senddata[1] = 2; senddata[2] = 0; senddata[3] = 4; senddata[4] = 5; cmdsend( senddata ); while(1){;

帮忙看一下c语言这个关于数组的错误~

问题描述 帮忙看一下c语言这个关于数组的错误~ 输入 10 个整数用选择排序法将它们按照升序排列好 原理说明:把一个数组从小到大排列,不停的扫描整个数组,第一次扫描把最小的数找出来并放在第一位,第二次扫描,把其余的数中最小的数找到放在第二位,以此类推,这样经过N-1次扫描之后就可以把N个数的顺序排列好了 #define A 10#include <stdio.h>int main(){ int a[A]ijkt; for(i=0;i<A;i++) scanf(""%d

printf-c语言中一个数组输出的问题

问题描述 c语言中一个数组输出的问题 #include int main() { int i; int temp[5]; for(i=1;i<=5;i++) { temp[i]=i; } printf("---------"); for(i=1;i<=5;i++) { printf("%d",temp[i]); } return 0; } 为什么能正常的给第5个元素赋值,并能输出第5个元素 解决方案 你越界了,数组下标从0开始,应该是 i=0:i<