- 主题:小白一问:随意指定地址的指针的行为
谁说行不同的?
那个例子挺好的,告诉你指针的本质。
【 在 easior 的大作中提到: 】
: 你说的这些我都了解,只不过那样的指针现在行不通了
:
--
FROM 211.94.243.*
其实你遇到的问题和跨进程应该没关系
在你自己的虚拟内存空间(2G/3G)内你是有完全访问权限的
只是你随机拼的地址/野指针大概率指向未初始化的内存区
上古时代应用可以直接飞野指针,现代OS是不会允许你这样做的
就算不考虑安全性,从虚拟内存机制也不会允许
【 在 easior (潜行) 的大作中提到: 】
: 这当然是好事,增加了黑客的难度。
: 之所以这么问,就是想知道那样指针什么场合下存在?
--
修改:oldwatch FROM 114.86.42.*
FROM 114.86.42.*
如果放在C++的世界里,一般来说指针的值必须是一个已经存在的由你的程序开辟的地址,否则解引用就是非法的。
【 在 easior 的大作中提到: 】
: 这当然是好事,增加了黑客的难度。
: 之所以这么问,就是想知道那样指针什么场合下存在?
:
--
FROM 76.126.252.*
dos下面平面指针没这么大地址范围。如果是分段的远指针,那可就比“访问任意地址”要复杂一点点了。
【 在 tangyl 的大作中提到: 】
: 这是DOS时代的书吗?
:
--
FROM 101.84.48.*
每个内存空间,都有一个申请者,这个申请者才是唯一的所有者,只有他去访问这个内存空间,才是被允许的
A要对B申请的内存空间做修改,就会被OS挡下来。这是OS为了确保系统稳定,采用的一种权宜之计
--
FROM 182.150.20.*
1. 不一定会segment fault
2. 不这么说的书本都是耍流氓
【 在 easior 的大作中提到: 】
:
: 以前的书本里讲指针,会一本正经地举例
: int *p = (int*)0x12345678;
: 煞有介事地说,解引用便可获得随意地址上的内存信息。
: 但操作系统根本不给面子,直接 segmentation fault。
--
FROM 49.199.208.*
1. 只要对其操作,除去取地址之外,都会 segmentation fault
2. 既然有平台可以这么操作,确实应该写;最好也要提一下现代操作系统的工作方式
【 在 dpblue (deep blue) 的大作中提到: 】
: 1. 不一定会segment fault
: 2. 不这么说的书本都是耍流氓
--
修改:easior FROM 27.115.42.*
FROM 61.155.142.*
看起来,和另一个版面提到的前向声明以及实例化很像
【 在 here080 (hero080) 的大作中提到: 】
: 如果放在C++的世界里,一般来说指针的值必须是一个已经存在的由你的程序开辟的地址,否则解引用就是非法的。
--
FROM 61.155.142.*
这理解不对。
A的地址空间里不存在“B申请的内存空间”。
【 在 qsasl 的大作中提到: 】
: 每个内存空间,都有一个申请者,这个申请者才是唯一的所有者,只有他去访问这个内存空间,才是被允许的
: A要对B申请的内存空间做修改,就会被OS挡下来。这是OS为了确保系统稳定,采用的一种权宜之计
--
FROM 101.84.48.*
早期cpu没有虚地址模式,操作系统也没有内存保护机制,所以你赋给指针随意一个地址,cpu会去寻址访问,外部看就是CPU操作地址线发送读写请求
【 在 easior (潜行) 的大作中提到: 】
: 以前的书本里讲指针,会一本正经地举例
: int *p = (int*)0x12345678;
: 煞有介事地说,解引用便可获得随意地址上的内存信息。
: 但操作系统根本不给面子,直接 segmentation fault。
--
FROM 111.201.49.*