c问题---关于数组溢出

问题描述

c问题---关于数组溢出

今天在做题时,发现定义整型数组a[10],并赋初值,然后我访问a[11],输出0,再a[11]=3后访问a[11],输出3,a的长度还是10,那么a[11]存在哪里了?

解决方案

你的数组越界了,C不会对此做出检查。越界的部分可能是没有使用的内存空间,或者是别的变量用的空间,或者根本就不存在。这个就很难说了。
好比把汽车开到马路外面,可能是草地,可能是沼泽,可能是河

解决方案二:

下标是11的地方也可以赋值,只能说明你运气比较好,你可以断点开下a的内存地址内容,第11个位置如果是空的那么你就能放,如果不是空的那么程序就崩溃了

解决方案三:

说到底还是语法不够严谨,应该报错的

解决方案四:

你的数组越界了,长度为10,你为11赋值不对

解决方案五:

其实知道数组越界就够了。
就好比人总是要死的,你问死了之后会怎么样呢,谁知道呢。活着的时候,想都别想这个,比较好。

解决方案六:

a[11]表示紧跟在前10个整型内存空间的一个整型大小的内存空间中的值。
定义整型数组a[10],意味着系统分配了10倍整型大小的空间,如果存储一个整型用4个字节的内存空间来存储,那么系统分配了连续的40个字节的内存空间,a[0]就对应这40个字节的头4个字节的内容,即第一个整型值,a[1]就对应这40个字节的第二组4个字节的内容,以此类推,因为数组被定义为整型,所以下标每变化一个单位对应着4个字节的存储空间,那么,a[11]就对应着紧随这40个字节之后的4个字节的内容,而数组下标的递增对应的是地址的连续的变化(在这里,当然是每隔4个字节)。
打个比方,比如,一个人爬楼梯,他计划爬10层,当他爬到第十层时,他又多爬了一层,显然这多出来的一层是存在的;如果问题是这样的,这个人爬楼梯实际上是参观,他申请了10层,而管理者接受了他的申请并允许他参观连续的10层,并告诉他从第一层在哪里,当他参观完10层后,意外地发现11层也可以参观,显然,参观紧挨着前10层的这一层是没有被授权的,然而他自己并不知道多参观这一层会有什么后果,尽管他参观了,并留下了他的脚印...

解决方案七:

题主,看到你的问题我写了篇博客,详细描述了指针访问越界后的现象,详见:http://blog.csdn.net/douqingl/article/details/50590574
希望能帮到你

解决方案八:

如果你定义的是a[10], 那么可访问的范围应该是a[0]到a[9], 访问a[10]以上都是错误的。如果9以后的地址是可访问的,你应该得到的是一个随时数,如果不可访问,程序就会崩溃。

解决方案九:

a[11]就在内存中,就在a[10]后面一个,你可以声明一个int a[10]然后把a[11]赋值 然后 scanf("%d",a[10+1]);试试,如果是你赋值的值 说明在物理存储上是在a[10]后面的。

解决方案十:

越界是肯定了,但并不是所有的越界立刻会表现出严重的错误。
假如你的数组有内存的空间中的前后都是指针,这时就会错误的修改了指针的值,此时再通过指针访问其所指向的地址,可能就会因为地址无效而引起程序崩溃。

时间: 2024-07-30 13:06:22

c问题---关于数组溢出的相关文章

fp-spark下运行并行FP-Growth算法当支持度<0.001的时候数组溢出

问题描述 spark下运行并行FP-Growth算法当支持度<0.001的时候数组溢出 做微薄的数据挖掘,支持度需要设置比较小,运行的时候支持度大于0.001没有问题,但是小于的时候会出现数组溢出.报错位置为第二行:val part = res.partition(t1 => tail.exists(t2 => t1._1 == t2)) val p1 = gen(part._1) if (part._2.length == 0) return p1 else return decare

一个关于数组溢出的问题,请大神帮小弟解惑

问题描述 一个关于数组溢出的问题,请大神帮小弟解惑 vc6.0环境,代码很简单,但是不管你输入的数组n是多大,a[n]的值都是n,按理说不是最大就到n-1了吗,为什么不报错? #include using namespace std; int main() {int i;int a[11]; int*p=a; for(i=0;i<=10;i++) a[i]=i; cout<<a[11]; return 0; } 解决方案 你试试int *a = new int[11];数组实际上放在栈内

缓冲区-C语言数组溢出问题求指点

问题描述 C语言数组溢出问题求指点 #include #define N 5 main() { int i,a[N]; for(i=0;i<N;i++) a[N]=i; for(i=0;i<N;i++) printf("%5d",a[N]); printf(" "); } 在第六行 警告 1 warning C4789: 缓冲区"a"(大小为 20 字节)将溢出:4 字节将在偏移 20 时开始写入 Run-Time Check Fai

这个程序在windows平台下能正常输出,结果也是对的。到linux下运行在50行产生数组溢出是怎么回事呢

问题描述 importjava.io.*;importjava.util.*;publicclassRout{publicstaticvoidmain(String[]args){//StringfilePath="d:\java\javatest\rout.txt";intreadLine[];readLine=newint[14];StringreadResult[]=newString[14];BufferedReaderreader=null;try{FileReaderfil

堆排序中数组溢出问题

问题描述 堆排序中数组溢出问题 堆排序代码,没有编译错,运行不起来,我估计是数组溢出了,但是看不出错误在哪里? #include<stdio.h> #include<stdlib.h> void exchange(int* a,int* b){ int t=*a; *a=*b; *b=t; } void Maxheap(int A[],int i,int size){ int l=2*i; int r=2*i+1; int largest; if(A[l]>A[i]&

栈内存存储和数组溢出问题

问题描述 栈内存存储和数组溢出问题 int function(const int src[16]){ int val1=0; int dst[16]={0}; int val2=0; const int *psrc=src; //问题1:如下代码行输出什么? fprintf(stdout,"size of src=%lun",sizeof(src)); //问题2:如下代码有什么副作用? for(int i=0;i<=16;i++){ dst[i]=*psrc+i; psrc++

一个数组小练习编译通过,运行出错!

问题描述 一个数组小练习编译通过,运行出错!在myeclipse上没有显示错误信息代码如下,请协助!packagepart1;publicclassTestArray{publicstaticvoidmain(String[]args){if(args.length<3){System.out.println("errorlength,pls.re-enter!");System.exit(-1);}doubled1=Double.parseDouble(args[0]);dou

C++使struct对象拥有可变大小的数组(详解)_C 语言

首先摘录<Inside The C++ Object Model>中的一段话: 把单一元素的数组放在一个struct的尾端,于是每个 struct objects 可以拥有可变大小的数组: struct mumble { char pc[1]; }; //获取一个字符串,然后为struct本身和该字符串配置足够的内存 struct mumble *pmumbl = (struct mumble*)malloc(sizeof(struct mumble) + strlen(string) + 1

[C/C++基础知识] 那些被遗忘的链表知识

最近快毕业了,复试又复习了一些知识.其中就包括那些被遗忘的链表知识,而它又是C语言中非常重要一个知识点.同时发现很多同学都会忘记该知识,所以通过这篇文章一方面帮助大家回忆链表知识,同时对刚接触C语言的同学也有帮助.我采用问答的方式回顾那些知识,希望能接受!提示:该文章引用李凤霞(北理)的<C语言程序设计教程>及课件和谭浩强(清华)的<C程序设计>. 一.链表基本概念 1.什么是链表? 链表是一种常见的动态进行存储分配的数据结构.2.为什么会出现链表这种结构呢?(1).C语言中使用数