免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: soulmachine
打印 上一主题 下一主题

堆栈溢出的问题 [复制链接]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
11 [报告]
发表于 2007-09-15 11:05 |只看该作者
原帖由 scutan 于 2007-9-14 19:41 发表


楼主那个a=0 本来是没有写错, 应该是论坛的原因,其本来应该是写

不是论坛的原因,是他贴代码的方式不对。

原帖由 swordfish.cn 于 2007-9-14 22:56 发表
楼主看来对栈还没学到家吧。
栈是由高地址向低地址增长的,所以还是先分配 i 等几个变量再分配 a 这个数组的。

并不是在所有的机器上栈都是往低地址增长的。

论坛徽章:
0
12 [报告]
发表于 2007-09-15 13:52 |只看该作者
用objdump -d看看就清清楚楚,明明白白,真真切切了哦

论坛徽章:
0
13 [报告]
发表于 2007-09-15 14:06 |只看该作者
版主又来指正了,多谢。
并不是在所有的机器上栈都是往低地址增长的。

论坛徽章:
0
14 [报告]
发表于 2007-09-15 18:26 |只看该作者
同意版主,我也记得,栈的增长顺序不是由编译器来决定的,而是由cpu的体系结构来决定的。实参的入栈顺序,局部变量的分配顺序,这才是编译器决定的:)

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
15 [报告]
发表于 2007-09-15 18:37 |只看该作者
原帖由 swordfish.cn 于 2007-9-15 14:06 发表
版主又来指正了,多谢。

客气了

论坛徽章:
0
16 [报告]
发表于 2007-09-16 11:42 |只看该作者
for(i=0;i<=16;i++){

运行了17次.....

论坛徽章:
0
17 [报告]
发表于 2007-09-16 12:09 |只看该作者
原帖由 soulmachine 于 2007-9-14 16:58 发表
#include
int main()
{
    int x,y,z;
    int i;
    int a[16];
    for(i=0;i


最后的a[16]难道不是字符串最后地‘0’字符啊,怎么是覆盖了i ???

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
18 [报告]
发表于 2007-09-16 12:53 |只看该作者
原帖由 vincol 于 2007-9-16 12:09 发表


最后的a[16]难道不是字符串最后地‘0’字符啊,怎么是覆盖了i ???

这哪跟哪嘛...

论坛徽章:
0
19 [报告]
发表于 2007-09-16 13:13 |只看该作者
#include <iostream>

using namespace std;

int main()
{

    int x,y,z;
    int i;
    int a[16];
    for(i=0;i<16;i++){
        a=0;
        cout << i << endl;
    }

}

在Mingw中输出是
0
~
15

#include <iostream>

using namespace std;

int main()
{

    int x,y,z;
    int i;
    int a[16];
    for(i=0;i<=16;i++){
        a=0;
        cout << i << endl;
    }

}

不停地循环
0~15


[ 本帖最后由 not_halt 于 2007-9-16 13:16 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2007-09-16 21:46 |只看该作者
<C陷阱与缺陷> 一书中对这个问题有讲解!
其实把<C专家编程><C陷阱与缺陷>这两本书看完, 论坛上很多的问题就迎刃而解了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP