【C/C++】数组越界

在上篇中说到了内存问题,今天我也遇到了可以用内存映射来解释的问题。代码如下:

#include<iostream>

using namespace std;

void main()
{
	int i;
	int a[5];
//    int i;
    cout<<&i<<endl;

	for(i=0;i<=5;i++)
	{
		a[i]=0;
		cout<<a[i]<<endl;
	}

}

上面的程序中,发生了数组越界访问,那么将会发生什么情况呢?一般来说的话,会系统中断,出现提示框,然而,这里发生了死循环。

我首先用下面的程序查看了i和数组元素的地址:

#include<iostream>

using namespace std;

void main()
{
	int i;
	int a[5];
    cout<<&i<<endl;

	for(i=0;i<5;i++)
	{
		a[i]=0;
		cout<<&a[i]<<endl;
	}

}

在我的电脑(小端模式)下结果如下:

     i的地址为:  12FF44
a[0]的地址为:  12FF30
a[1]的地址为:  12FF34
a[2]的地址为:  12FF38
a[3]的地址为:  12FF3C
a[4]的地址为:  12FF40

按照这种内存存储方式,a[5]的地址为:  12FF44 与i的地址相同!又因为我令a[i]=0,则每当循环到a[5]=0时,i=0,从而满足了循环条件,陷入了死循环。

当我把变量定义顺序改变时,将i在数组后定义即:

#include<iostream>

using namespace std;

void main()
{
	int a[5];
	int i;
    cout<<&i<<endl;

	for(i=0;i<5;i++)
	{
		a[i]=0;
		cout<<&a[i]<<endl;
	}

}

输出的地址为:

     i的地址为:  12FF30
a[0]的地址为:  12FF34
a[1]的地址为:  12FF38
a[2]的地址为:  12FF3c
a[3]的地址为:  12FF40
a[4]的地址为:  12FF44

这时若发生越界的话,a[5]的地址为:  12FF48 与i的地址不同,系统会中断,出现错误提示框

时间: 2024-11-05 12:22:29

【C/C++】数组越界的相关文章

各位大神,传递图片问题,学长说是数组越界,不知道怎么解决

问题描述 各位大神,传递图片问题,学长说是数组越界,不知道怎么解决 图片传递代码图片接收代码 解决方案 不是内存溢出,而是有变量为null 解决方案二: 我觉得你的学长判断是错误的,因为错误消息已经写了:NullPointerException,这个异常消息的含义就是说有空对象调用了方法.所以不会是内存溢出(不完全排除,但可能性很小),而你所指出的那行代码上有一个空对象调用了方法. 我看过你的代码,你箭头所指向的代码一共有4个对象调用了方法,其中intent对象已经看到了你new的代码,所以它不

string-java选择排序使用swap()函数出现数组越界报错

问题描述 java选择排序使用swap()函数出现数组越界报错 class SelectSort{ public static void Swap(int[] arr,int i,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void PrintArray(int[] Array){ for(int i=0;i<Array.length;i++){ System.out.print("

java小白求大神帮看一下为什么会发生数组越界。代码如下:

问题描述 java小白求大神帮看一下为什么会发生数组越界.代码如下: package arraytest; public class ArrayTestSort { public static void main(String[] args) { int i,j=0; int[] arr = new int[]{100,40,60,87,34,11,56,0}; int temp = 0; for(i = 0;i<arr.length;i++){ for(j = 0;j<arr.length-

java连连看数字换图片数组越界问题

问题描述 java连连看数字换图片数组越界问题 Jbutton 按钮数字换成图片后,只有部分按钮有图片,有的按钮上的图片不能显示.提示说数组越界,但具体不知道怎么回事.按钮数组是6*5,存储按钮位置的数组是8*7,调用图片的代码private static Icon[] icons = new ImageIcon[6*5]; private static final String imgDir=""d:/shuiguo"";static{ try{ File dir

ExpandableListView动态刷新出现数组越界,求帮忙

问题描述 ExpandableListView动态刷新出现数组越界,求帮忙 childView是4个textView组成,GroupView就是一个textView. 本身是3个组,当刷新变成4个组时,出现数组越界 这行代码:info = map11.get(key).get(childPosition); 现在不知道怎么解决数组越界问题,listview的数组越界可以用list.clear()方法, 这个ExpandableListView是第一次用,知道的帮忙下,谢谢了.急用 部分代码如下:

如何处理数组越界而不会让程序崩溃?

如何处理数组越界而不会让程序崩溃? 数组越界是非常常见的现象,有时候,你的程序中,因为数组越界而崩溃了,很难找,理想的状态是,数组越界的时候给我们返回nil就好了. 请看下面这个例子: // // RootViewController.m // BeyondTheMark // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" @interface RootViewCon

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

问题描述 C语言数组越界的含义 听同学说C语言数组越界会导致出错,我试验了下不会,谁能写一个数组越界出错的例子? 解决方案 这个不一定能观察到,因为C没有越界检查,你可以这么写: int a[10]; int i=0; while (true) { a[i++] = i; } 肯定会报错 解决方案二: 越界不就是超过数组的大小,随便写个拷贝就行了 解决方案三: 例如你声明数组a[10],如果访问a[10]就发生越界错误,越界错误的本质是访问了未知内存空间,如果之前此区域内存被使用后,此时访问获得

java-IndexOutOfBoundsException数组越界的问题求解

问题描述 IndexOutOfBoundsException数组越界的问题求解 D/AndroidRuntime( 7415): Shutting down VM --------- beginning of crash E/AndroidRuntime( 7415): FATAL EXCEPTION: main E/AndroidRuntime( 7415): Process: com.android.settings, PID: 7415 E/AndroidRuntime( 7415): j

c-为什么数组越界后仍然能够输出hello?

问题描述 为什么数组越界后仍然能够输出hello? #include<stdio.h> void hello(void) { fprintf(stderr,"hello!n"); } void fun(void) { void *buf[10]; static int i; for(i=0;i<100;i++) { buf[i]=hello; } } int main(void) { int buf[1000]; fun(); return 0; } 解决方案 C++

java-为什么当输入空格或者是直接按enter键的时候会抛出数组越界异常

问题描述 为什么当输入空格或者是直接按enter键的时候会抛出数组越界异常 public static void main(String[] args) throws IOException { int i=1; while(i!=0){ System.out.println("请输入用户名和密码,以分号分隔:"); Scanner sn=new Scanner(System.in); String userPWD=sn.nextLine(); if(userPWD!=null||!&