首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么从int的地址回读不能返回int的正确值(C & gdb)

为什么从int的地址回读不能返回int的正确值(C & gdb)
EN

Stack Overflow用户
提问于 2019-01-29 13:00:10
回答 1查看 177关注 0票数 2

我有一个用gdb调试的c程序。这是在Ubuntu x86上完成的,c程序是用gcc编译的。我一个接一个地声明两个int变量

代码语言:javascript
复制
int a = atoi (argv[1]);
int b = atoi (argv[2]);

我传递给它们的值分别是2和4。现在,我在这些行之后中断并进行调试。根据下面的数据,int b似乎从地址0xbffff048开始,并占据0xbffff048、0xbffff049、0xbffff04a、0xbffff04b。并且int b从下一个地址0xbffff04c开始也是有意义的。但是,如果我显示这四个地址的值,十六进制返回的值不等于十进制4(这是在应用程序中确认并在gdb调试中打印的b的值)。我在这里解释/做错了什么?

代码语言:javascript
复制
(gdb) display a
2: a = 2
(gdb) display b
3: b = 4
(gdb) display &a
4: &a = (int *) 0xbffff04c
(gdb) display &b
5: &b = (int *) 0xbffff048
(gdb) x  0xbffff048
0xbffff048:     0x00000004
(gdb) x  0xbffff049
0xbffff049:     0x02000000
(gdb) x  0xbffff04a
0xbffff04a:     0x00020000
(gdb) x  0xbffff04b
0xbffff04b:     0x00000200
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 13:08:47

您看到的值2位于为整数指定的4个字节之后。你的输入4就在那里,占据了第一个半字节。

我认为评论更好地解释了这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54414099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档