| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1823 人关注过本帖
标题:关于数组超界问题
取消只看楼主 加入收藏
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:6 
关于数组超界问题
#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
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
我用的是  VC6.0,调试,显示是花屏,一直出现数字

孤独与寂寞是催化一个人迅速成长的良药,没有之一
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
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
以下是引用liufashuai在2013-8-12 19:22:09的发言:

就是临时变量在栈上分配,而且栈的分配地址是从下到上的!




临时变量在栈上分配是什么意思????都是哪种变量是在栈上分配的???哪些是在堆上分配的??????

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

确保代码不越界才是正路。越界之后出现的现象,你找到相应的解释,又能利用它来干什么?难道想利用这种副作用?何况副作用总是会被消除的,效应并不确定,刻意利用这些东西,是邪门歪道。学IT到这份上,唉~



只是突然遇到,感觉很奇怪,不搞明白总是不甘心啊

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

在栈上的变量,必然是连续分配的,再加上向上或向下增长,这只是一种实现假定,尽管某些编译器确实是这样做的,但并不是所有编译器都会这样做,因为标准也没规定编译器必须这样分配变量,那是编译器的自由,编译器可能会察觉这样的漏洞,采取预防措施,那些措施未必是我们所知道的(比如跳过一些间隙分配,踏入间隙读写即触发系统保护机制,谁知道编译器设计者会怎么做),也不需要知道,只要规规矩矩地写出不越界的代码即可,越界之后有什么现象,与你无关,研究它不见得你是高手。

程序员最忌的就是假定太多,假定这假定那,一到现实不满足那么多假定,这程序就越容易崩溃和不切实用。假定调用者不出错就是一个隐患很大的假定,现实中指望别人不出错,把正确的东西交给你处理,那也太容易做人了。这种思维不纠正,苦头有得你吃。任何程序的编写都有这样那样的假定,但自己必须很清醒地知道到底作了哪些假定,并充分论证过这些假定是无害和适用的,才能在这些假定的基础上写程序,一旦忘记了这些假定前提,写出来的程序就会有千奇百怪的运行时问题,那才是程序员最头痛的东西,程序员一辈子都在跟这些错误打交道,一个不给自己的产品包终身的厂家,如何在市场上立足,真以为程序员很风光么,那样的生涯闷死你。

这个其实也正犯了编程规范中不要给内存照X光片的戒条,试图解析内存的细节,殊不知不全然是那样的,个别适用的模型并不普遍,那样的经验有什么用呢。



好了斑竹,不研究了,多谢

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-13 06:37
快速回复:关于数组超界问题
数据加载中...
 
   



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

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