有目的的访问内存空间

xmu_才盛 2008-02-20 05:41:01
如题,因为最近看到很多关于内存的帖子,分析后感觉很好玩。
就如那个很强的公司的面试题一样,在看vc6.0自带的调试工具的时候发现了一个问题。
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
printf("%x",ptr1[-1]);
}
第二问省掉了。

那个我在看ptr1的时显示是0x0012ff80,而&a是0x0012ff6c,正常。但是当我看&a+1是它显示是0x0012ff6d,显然不对,因为对指针加一相当于加上 数组长度*类型字节数,所以&a+1地址也应该是0x0012ff80才对,后来直接打印&a+1后也证实我的想法正确。

后来在同学vs2005上就没有这个错误。 所以我认为vc6.0的调试工具有一点问题。

虽然只是地址的问题,不会影响到里面的内容。

但是还是相当想写一个可以实时看内存的软件。但苦于不知道怎么有目的的访问内存?
希望明白的大侠们给指明一条道路,谢谢了。

其实只要看0x0012ff**这段就可以了,貌似足够了。如果可以看到其他部分就更好了。
...全文
157 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmu_才盛 2008-02-26
  • 打赏
  • 举报
回复
debug 可以用控制台调用 发现很好用,
不过还是想写一个。谢谢告知。
xmu_才盛 2008-02-26
  • 打赏
  • 举报
回复
9楼的回答有错误
发表于:2008-02-22 02:14:139楼 得分:0
这个问题主要是:高位字节存在内存的高位中(&a+1)、a的类型(a+1)的地址比a大a的地址大5*sizeof(int);
如何查看内存:在VS2005版本中可以添加Memory菜单,Tools-> Customize-> Commands-> debug,剩下的自己研究一下吧;
不过我不知道VC++6.0有没有类似功能,建议早点升级到VS2003以上吧,VC++6.0太老了。



(&a+1)是比a大a的地址大5*sizeof(int), 而a+1就是a[1]的地址也就是比a的地址+sizeof(int),
(int)&a+1才是 &a的高位字节吧 相当于a地址+1
星羽 2008-02-25
  • 打赏
  • 举报
回复
up
MagiSu 2008-02-25
  • 打赏
  • 举报
回复
明白了,谢谢楼上指教!
hemu1190 2008-02-25
  • 打赏
  • 举报
回复
不明白,有高人指到不?
npuhuxl 2008-02-22
  • 打赏
  • 举报
回复
这个问题主要是:高位字节存在内存的高位中(&a+1)、a的类型(a+1)的地址比a大a的地址大5*sizeof(int);
如何查看内存:在VS2005版本中可以添加Memory菜单,Tools->Customize->Commands->debug,剩下的自己研究一下吧;
不过我不知道VC++6.0有没有类似功能,建议早点升级到VS2003以上吧,VC++6.0太老了。
xmu_才盛 2008-02-21
  • 打赏
  • 举报
回复
当然是取决于编译器的,应该和大端和小端有关系
xmu_才盛 2008-02-21
  • 打赏
  • 举报
回复
回3楼的

&a+1 相当于 &a+sizeof(a),而不是&a+sizeof(int)
a+1 相当于 a[1];
(int)&a+1 相当于 在a的地址上向高位偏移一个内存地址
sheenl 2008-02-21
  • 打赏
  • 举报
回复
那就得先取得你要监视的进程的句柄, 然后用ReadProcessMemory来看
djwangping 2008-02-20
  • 打赏
  • 举报
回复
因为对指针加一相当于加上 数组长度*类型字节数 ...
是不是应该是要取决于编译器?
buzhihuigai 2008-02-20
  • 打赏
  • 举报
回复
a本身就是一个指针吧?

a+1 等于 &(a[1]) 吧?

&a+1 是什么?
MagiSu 2008-02-20
  • 打赏
  • 举报
回复
我想问一下的是
为什么&a+1之后,ptr指向的是&(a[5])+sizeof(int),而不是&a[1]。
xmu_才盛 2008-02-20
  • 打赏
  • 举报
回复
二楼的就当我年轻,精力旺盛吧。感觉好玩而已,不过很希望得到指点,谢谢
Treazy 2008-02-20
  • 打赏
  • 举报
回复
你就直接debug你的程序
然后看memory不就行了

用得着自己写个函数来显示嘛

又不是ide不支持,如果不支持的话那就需要这样做了……

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧