看板 C_and_CPP 關於我們 聯絡資訊
以下是我打的程式碼 #include <stdlib.h> #include <stdio.h> int main() { int times=0; int NUM=123; int *pNUM=&NUM; while(times<5){ printf("%p>>>%d\n",pNUM,*pNUM); pNUM+=1; *pNUM=NUM; times+=1; } system("pause"); return 0; } 我的目標是把變數NUM的值123 也寫入NUM後面接的4個位址 假設NUM的位址是0x0001 那麼結果應該是: 0x0001 值→123 0x0005 值→123 0x0009 值→123 0x000d 值→123 0x0011 值→123 可是編譯器顯示的只有第一行,也就是 0x0001 值→123 為什麼會這樣呢?問題是否出在其實後面四個是無法寫入的? 菜鳥請各位高手指教orz ----- Sent from JPTT on my InFocus M330. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.127.110.54 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1438654401.A.DAD.html
Feis: 後面四個不只無法寫入,連是否存在都是個問題~ 08/04 10:35
啊...我天真的以為後面一直加下去就會有 ※ 編輯: xjpjeass (140.127.110.54), 08/04/2015 10:53:23
kwpn: 在C++裡你需要用到多少記憶體,都要明顯地配置清楚. 08/04 13:06
M013020058: 想問,指標可以運用的地方是?目前只知道抓變數的位置 08/04 19:02
指標是儲存記憶體位址的變數~(應該吧...)
stupid0319: 恭喜你得到記憶體溢位的高級技能 08/04 20:27
溢位的話,是指我寫入的是無意義未定義的記憶體空間嗎? ※ 編輯: xjpjeass (219.80.129.226), 08/04/2015 20:49:43 ※ 編輯: xjpjeass (219.80.129.226), 08/04/2015 20:50:33
stupid0319: 利用溢位修改執行緒堆疊內容,可是hack的超高技巧! 08/04 22:42
是所謂的緩衝區溢位嗎? 我無言了0.0 ※ 編輯: xjpjeass (219.80.129.226), 08/04/2015 23:58:36 ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:01:34
xjpjeass: 所以如果要達成那個目標,要先跟電腦宣告要使用的記憶體 08/05 00:05
xjpjeass: 配置,有明確的範圍才能使用其中的位址是嗎? 08/05 00:05
stupid0319: 若照程式碼來看,pUNM+1 = &times 08/05 00:18
stupid0319: 所以執行後times = 124 ? 08/05 00:19
欸?times是宣告用來當作計算迴圈次數的變數,應該跟NUM沒什麼關係啊.....
stupid0319: 至於為什麼,跟堆疊stack有關 08/05 00:24
啊,我好像大概了解你的意思了....所以這樣第一次以後就無法執行了吧。然後,我在去把那段看熟好了.... ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:26:38
stupid0319: 在system("pause");自己印看看times吧 08/05 00:28
好我試試看吧 ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:28:31 ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:29:27
kindaichitom: 原po你有當駭客的潛力!! 08/27 08:03