作者unixxxx (皓皓)
看板C_and_CPP
標題[問題] 把值存到一個指定的記憶體位址
時間Fri Jan 23 17:11:35 2015
把 整數 5 存到 0x00123456這個記憶體位址 並用指標指向它
請問該怎麼把值存到指定的記憶體位址裡?!
int *a;
a=00123456;
*a=5;
原本是這樣打 可是編譯過不了 他不會把00123456當做記憶體位址
應該要怎麼改?!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.54.141
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1422004298.A.074.html
→ wenyonba: 一定不行啊,你怎麼知道這位址是哪,有沒有其他資源佔用 01/23 18:29
→ wenyonba: 一定要由 OS 分配給你 01/23 18:29
那這題應該要寫怎麼寫?!
※ 編輯: unixxxx (114.43.54.141), 01/23/2015 18:50:00
推 pizzafan: /如何取得系統總記憶體的位置 01/23 19:02
推 epithet: int *logicalAddr = reinterpret_cast<int *>(42798); 01/23 19:13
推 carylorrk: 只有我覺得是那個 0 開頭的關係嗎XDD 01/23 19:40
→ wenyonba: 直接 reinterpret_cast 過去會發生什麼事 ?_? 01/23 21:20
推 epithet: 會把 42798 存進記憶體裡面,一段該代表變數的位置裡。 01/23 22:46
推 L4ys: 應該要寫 a=0x00123456; 應該會直接segmentation fault啦 01/24 00:05
→ L4ys: 這個記憶體位置通常不可寫 01/24 00:06
推 Killercat: 給你個提示,在保護模式下,所有程式拿到的記憶體都是 01/24 02:07
→ Killercat: 相對位置,只有kernel space(linux)跟Ring1以下(Win) 01/24 02:08
→ Killercat: 才有機會得到絕對位置 01/24 02:08
→ uranusjr: 單晶片之類的也是有可能會這樣寫啦 01/24 04:08
推 karose: 位址要轉指標便可 01/24 09:14
→ carylorrk: 他也沒有講是不是有 MMU,應該可以預設不用理吧。 01/24 17:06
→ carylorrk: 除非是在寫 kernel,纔會有轉換的問題。 01/24 17:07
→ Killercat: 其實早期的確能透過dll共用記憶體位置 01/24 21:28
→ Killercat: 不過那已經是很早期的windows API行為就是 :P 01/24 21:28
→ Killercat: 當年不少IPC都是用這種偷吃步的方法實現的 01/24 21:28
→ TobyH4cker: *(int *)ADDRESS = VALUE; 01/24 23:11
→ TobyH4cker: 不知道上面為什麼扯到好遠的地方去... 01/24 23:12
→ TobyH4cker: 是L4ys大大耶XDDD 先膜拜 原PO只有漏了"0x" 其他沒錯 01/24 23:13
→ jaw109: 除非這位址是os配給你的,否則一定會segmentation fault 01/25 14:33
推 tubbysong: Int *p; p=(int)0x1234 or *p=(int)0x1234 01/25 17:41
→ TobyH4cker: 樓上你兩個式子是不同意義喔 01/26 04:40
→ TobyH4cker: 樓主只是舉個例子,沒有考慮範圍,所以純就問題解答 01/26 04:43