免费注册 查看新帖 |

Chinaunix

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

全局变量的地址为什么会改变? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2010-01-25 09:53 |只看该作者
原帖由 prolj2 于 2010-1-22 23:40 发表
“张总,是这样的,您在家里Ctrl+C,在这Ctrl+V是不行的”  (娱乐一下呵)

论坛徽章:
0
52 [报告]
发表于 2010-01-25 09:54 |只看该作者
原帖由 ytl 于 2010-1-24 18:28 发表


AIX 4.1系统。程序是单线程的,大致如下

int global_int = 0;

for (int i = 0; ; i++)
{
      printf("addr = %p, value = %d\n", &global_int, global_int);
      global_int++;
      int_a ...



每次都循环到同一个数?是哪个值呢?
是不是对int_array赋值导致越界了?

另外,全局变量的地址肯定不会变,不管同一次运行还是多次运行,链接的时候就定了!

论坛徽章:
0
53 [报告]
发表于 2010-01-25 09:58 |只看该作者
我呸! 这样的弱智问题老娘只有在大一的时候才犯的,不知道哪儿出轨了吧?o(∩_∩)o...哈哈,基本功很烂就别这么牛B,我来很确定的告诉大家,xlc绝对没有问题,就是lz开内存出轨了。

论坛徽章:
0
54 [报告]
发表于 2010-01-25 10:14 |只看该作者
原帖由 ytl 于 2010-1-24 18:31 发表


全局变量的地址应该是放在代码段的,代码段应该是read only的,怎么可能被修改呢?



全局变量啥时放到代码段了?还是先把基本功练扎实吧。

错就错了,别人给你指出问题还这么牛就不对了。

论坛徽章:
0
55 [报告]
发表于 2010-01-25 10:17 |只看该作者
原帖由 ytl 于 2010-1-24 19:21 发表


请自掌嘴巴20次!



全局变量是在数据段。

论坛徽章:
0
56 [报告]
发表于 2010-01-25 10:20 |只看该作者
全局变量的地址
地址能说放在哪儿么?
你们家地址是“放在”哪儿的?

论坛徽章:
0
57 [报告]
发表于 2010-01-25 10:23 |只看该作者
LZ的意思是
int g_test = 0;
while(1)
{
    printf("%d",&g_test);
}
每次输出不一样?

论坛徽章:
0
58 [报告]
发表于 2010-01-25 10:25 |只看该作者
标题是  变量的地址为什么会改变呢?
内容说的却是 全局变量。
可见楼主表达能力不行,或者说逻辑不严谨。。。。

还有楼主对你指出错误,你却别人自掌嘴巴? 什么态度。。。
全局变量的地址是固定的,但可能硬编码进汇编中,也就是说它的地址保存在代码断。
但是全局变量是保存在数据段的。


最后你想解决问题把代码都帖出来,或者反汇编上来吧,你看不出,不代码别人看不出。 牛人还是很多的。

论坛徽章:
0
59 [报告]
发表于 2010-01-25 10:44 |只看该作者
lz说的变量的地址是不变的,这个很容易验证! 看起来变了那是printf造成的 , 而printf之所以产生这种现象当然是楼主造成的.
通常的可能是格式和类型没有匹配.

论坛徽章:
0
60 [报告]
发表于 2010-01-25 11:07 |只看该作者
原帖由 prolj 于 2010-1-25 10:20 发表
全局变量的地址
地址能说放在哪儿么?
你们家地址是“放在”哪儿的?


看透了,你算是不能醒悟了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP