- 主题:小白一问:随意指定地址的指针的行为
是必然segment fault吗?我还以为只要地址在自己程序的空间里就可以访问
【 在 easior @ [CPlusPlus] 的大作中提到: 】
:
: 1. 只要对其操作,除去取地址之外,都会 segmentation fault
: 2. 既然有平台可以这么操作,确实应该写;最好也要提一下现代操作系统的工作方式
:
: 【 在 dpblue (deep blue) 的大作中提到: 】
--
FROM 49.183.53.*
飞到未分配内存的话,对应页表项都找不到
【 在 dpblue (deep blue) 的大作中提到: 】
: 是必然segment fault吗?我还以为只要地址在自己程序的空间里就可以访问
--
FROM 180.173.2.*
我知道如果地址不在自己空间里肯定是崩的
想问问如果正好是自己程序可以访问的呢?也是必然崩吗?
【 在 oldwatch @ [CPlusPlus] 的大作中提到: 】
:
: 飞到未分配内存的话,对应页表项都找不到
:
: 【 在 dpblue (deep blue) 的大作中提到: 】
: : 是必然segment fault吗?我还以为只要地址在自己程序的空间里就可以访问
--
FROM 49.183.53.*
程序自己可以访问的地址空间有哪些?
猜想一下,肯定就是那些用&操作能取得的地址。
但若是这样的话,和
int i = 1; int* p = &i;
差不多,这样的指针就不算随意乱指了。
【 在 dpblue (deep blue) 的大作中提到: 】
: 我知道如果地址不在自己空间里肯定是崩的
: 想问问如果正好是自己程序可以访问的呢?也是必然崩吗?
--
FROM 61.155.142.*
取决于你“自己空间”是什么意思。
【 在 dpblue 的大作中提到: 】
: 我知道如果地址不在自己空间里肯定是崩的
: 想问问如果正好是自己程序可以访问的呢?也是必然崩吗?
:
--
FROM 101.84.48.*
就是上面那个回复里
int i = 1; int* p = &i;
p里面存放的值
【 在 ilovecpp 的大作中提到: 】
: 取决于你“自己空间”是什么意思。
: :
--
FROM 49.183.53.*
那可以。指针就是个整数,整数和整数是平等的,没有身份。
问题是像楼主那样你代码里直接写一个整数,这整数哪来的,你挺牛逼啊。
【 在 dpblue 的大作中提到: 】
: 就是上面那个回复里
: int i = 1; int* p = &i;
: p里面存放的值
: ...................
--
修改:ilovecpp FROM 101.84.48.*
FROM 101.84.48.*
我之前回复的意思是:瞎写的这个整数正好就是这个程序可以访问的地址,那就可以访问
但下面有人回复说必然会崩,所以把我搞迷糊了
【 在 ilovecpp 的大作中提到: 】
: 那可以。指针就是个整数,整数和整数是平等的,没有身份。
: 问题是像楼主那样你代码里直接写一个整数,这整数哪来的,你挺牛逼啊。
--
FROM 49.183.53.*
只能说存在撞上正确地址/凌空构建合法指针的可能……
【 在 dpblue (deep blue) 的大作中提到: 】
: 我之前回复的意思是:瞎写的这个整数正好就是这个程序可以访问的地址,那就可以访问
: 但下面有人回复说必然会崩,所以把我搞迷糊了
--
FROM 115.239.231.*
现在都是保护模式了,你这个地址,要是自己进程没申请过,那就是不能访问。
【 在 easior 的大作中提到: 】
:
: 以前的书本里讲指针,会一本正经地举例
: int *p = (int*)0x12345678;
: 煞有介事地说,解引用便可获得随意地址上的内存信息。
: 但操作系统根本不给面子,直接 segmentation fault。
--
FROM 183.198.2.*