看板 C_and_CPP 關於我們 聯絡資訊
把 整數 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