给内存地址“0x123456789”赋值为0的问题

LearaeL 2011-09-07 04:08:26
#include <iostream>
using namespace std;

int main()
{
long *p;
cout << 0x123456789;
p=(long *)0x123456789;
*p=0;
//cout << 0x123456879; //编译错误,求解释以及正确的赋值方法,谢谢
}
...全文
427 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 luciferisnotsatan 的回复:]

得保证有读写那处地址的权限才行。
[/Quote]
而且,修改还需要不会影响程序正常运行
luciferisnotsatan 2011-09-07
  • 打赏
  • 举报
回复
得保证有读写那处地址的权限才行。
gw_net 2011-09-07
  • 打赏
  • 举报
回复
access vialoation
yuyan_linger 2011-09-07
  • 打赏
  • 举报
回复
long *p;
p=(long *)0x12345678;
cout<<*p;
*p=0;
cout<<*p;
我觉得你可能是想这样 看看修改前后这个地址的值原来是多少 现在是不是0

但是 这个地址是非法地址 会崩溃 你换个栈地址试试
辰岡墨竹 2011-09-07
  • 打赏
  • 举报
回复
这种荒唐的事情,OS能允许你么?就算是用户空间,如果你没有用VirtualAlloc分配内存页,对应的内存页应该是不可写的吧。
不要妄图做这种事情,毕竟内存是Windows管理的,你要写什么,能不能写,得先让系统同意了再说。
除非你能切换到ring0级,否则任意地址写是不可能做到的。
kkrmr 2011-09-07
  • 打赏
  • 举报
回复
turing-complete 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 learael 的回复:]

引用 2 楼 ouyh12345 的回复:

cout << 0x123456789;干嘛?
输出地址还是内容?如果是内容的话
cout << *(long *)0x123456789;


前面的cout是测试一下 与后面修改后的对比一下 。可以 cout << 0x123456789也可以直接输出一个随机数字啊
[/Quote]

随机数这种思想会造成越界的,再者就算取到了,结果也不一定是随机的
clannadgirl 2011-09-07
  • 打赏
  • 举报
回复
在有的编译器里 直接修改指针指向的地址的值也是不合法的
LearaeL 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ouyh12345 的回复:]

cout << 0x123456789;干嘛?
输出地址还是内容?如果是内容的话
cout << *(long *)0x123456789;
[/Quote]

前面的cout是测试一下 与后面修改后的对比一下 。可以 cout << 0x123456789也可以直接输出一个随机数字啊
ouyh12345 2011-09-07
  • 打赏
  • 举报
回复
cout << 0x123456789;干嘛?
输出地址还是内容?如果是内容的话
cout << *(long *)0x123456789;
weixiaoshashou 2011-09-07
  • 打赏
  • 举报
回复
0x123456789,你数一下有多长吧,36位,这能不出错吗

65,210

社区成员

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

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