游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2803|回复: 6

为什么不能读取内存里面得值

[复制链接]

1

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-5-5 11:14:00 | 显示全部楼层 |阅读模式
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int *p;
    // 将地址 0x0672b82c付给指针 p
    p = reinterpret_cast< int* > (0x400500);
    cout<<*p<<endl;
    return 0;
}
原代码如上,一运行就出错,换了很多地址都不行,高手帮帮忙,为什么?

29

主题

405

帖子

405

积分

中级会员

Rank: 3Rank: 3

积分
405
发表于 2007-5-5 12:41:00 | 显示全部楼层

Re:为什么不能读取内存里面得值

Oh Mey God!
还是第一次看到有人这样给指针付值的.
不明白为什么你要按自己的意思给指针,指定特定的内存地址?让系统来分配不好么?你怎么知道那块内存是只读还是只写?你怎么知道那个内存地址就一定有效呢?

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-5-5 14:29:00 | 显示全部楼层

Re:为什么不能读取内存里面得值

做法并没有错,只是你不能保证地址是有效的。而且这种代码基本没有移植性,有可能A机正确,B机就错了。

33

主题

544

帖子

554

积分

高级会员

Rank: 4

积分
554
发表于 2007-5-5 15:27:00 | 显示全部楼层

Re:为什么不能读取内存里面得值

我这可以,每个人机器内存里东西不一样,不过按道理说只要有那块地址,读里面的东西应该不会有什么问题吧

29

主题

354

帖子

359

积分

中级会员

Rank: 3Rank: 3

积分
359
QQ
发表于 2007-5-5 19:00:00 | 显示全部楼层

Re:为什么不能读取内存里面得值

如果这样可以,那系统就崩溃了

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
发表于 2007-5-6 09:43:00 | 显示全部楼层

Re:为什么不能读取内存里面得值

OS准备了很多手段防止内存操作越界,如果你这段代码放在一些嵌入式设备上的话可能没事,但PC上先别这么干。

6

主题

396

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
发表于 2007-5-7 12:03:00 | 显示全部楼层

Re:为什么不能读取内存里面得值

我这里也不出错,8知道楼主用的什么编译器。
一般由VC生成的可执行镜像默认被装载到0x00400000的位置,0x00400500是PE文件头里的位置,不存在访问保护的问题,其他位置就难说了,如果没分配,或者不可读,就会有访问异常。如果你的程序的ImageBase不是0x00400000,那就难说了。
另外这个代码不一定存在可移植问题,exe的ImageBase是PE镜像的属性,每次装载exe,都必然装在这个位置,系统DLL的装载位置,一般也不变,因为为了保证DLL装载速度,出厂的时候都调整过了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 14:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表