| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1823 人关注过本帖
标题:关于数组超界问题
只看楼主 加入收藏
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:23 
关于数组超界问题
#include<stdio.h>
int main()
{  
    int i;
    int a[10];
    for (i = 0; i <= 10; ++i)知道错误在这,但是不知道为何结果是死循环??????
    {   
        a[i] = 0;
        printf("%d\n", i);
    }
return 0;   
}
基础不是多好,希望大神讲细点,重点在死循环啊,死循环,死循环

[ 本帖最后由 小小程序猿 于 2013-8-12 19:19 编辑 ]
2013-08-12 19:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
0-10 是11个元素啊

DO IT YOURSELF !
2013-08-12 19:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
我用vs2010对这段代码进行测试  结果是 内存非法访问  而并非是什么“死循环”

DO IT YOURSELF !
2013-08-12 19:15
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
我用的是  VC6.0,调试,显示是花屏,一直出现数字

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-12 19:17
丶弱水彡千
Rank: 5Rank: 5
来 自:地狱十九层
等 级:职业侠客
威 望:2
帖 子:203
专家分:369
注 册:2013-6-16
收藏
得分:2 
只有40个字节  你用了44个

这个怎么玩
2013-08-12 19:17
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
以下是引用wp231957在2013-8-12 19:08:03的发言:

0-10 是11个元素啊



就是因为超界了,才出的错,知道有错,但是不理解为何如此

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-12 19:17
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
以下是引用丶弱水彡千在2013-8-12 19:17:35的发言:

只有40个字节  你用了44个



         这就死循环??????????

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-12 19:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
还真是如此   vs却不会

原因不详  鉴于一段明显越位的代码  而且编译器又是被大家批判的vc6  所以就没啥研究的价值了吧

DO IT YOURSELF !
2013-08-12 19:21
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:10 
这个问题其实也很简单,就是临时变量在栈上分配,而且栈的分配地址是从下到上的,
因此你先定义变量i,在定义数组a[10],其实a[10]的位置就是i的位置,因为
C语言不检查越界情况,所以,当你给a[10]赋值为0的时候就是给i的值赋值0,因此就是死循环

你可以这样:
程序代码:
#include<stdio.h>
int main()
{  
    int i;
    int j;
    int a[10];
    for (i = 0; i <= 10; ++i)
    {    
        a[i] = 0;
        printf("%d\n", i);
    }
return 0;    
}



在它们的定义之间加一个定义,这样给a[10]赋值就是给j赋值,i就不受影响了
但是如果你<=11的话还会受影响的(理论上应该会,我没实验)

试过了,这样的话也是死循环,原理一样,以后要注意。把实质到内存,一切问题就很好解决!

[ 本帖最后由 liufashuai 于 2013-8-12 19:25 编辑 ]

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-12 19:22
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:0 
有点意思,不过编程还是按规矩来比较好
2013-08-12 19:30
快速回复:关于数组超界问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017146 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved