[問題] 自己練習運用基礎的指標小問題

看板C_and_CPP作者 (人人)時間10年前發表 (2015/08/04 02:13), 10年前編輯推噓7(705)
留言12則, 6人參與, 最新討論串1/4 (看更多)
以下是我打的程式碼 #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

08/04 10:35, , 1F
後面四個不只無法寫入,連是否存在都是個問題~
08/04 10:35, 1F
啊...我天真的以為後面一直加下去就會有 ※ 編輯: xjpjeass (140.127.110.54), 08/04/2015 10:53:23

08/04 13:06, , 2F
在C++裡你需要用到多少記憶體,都要明顯地配置清楚.
08/04 13:06, 2F

08/04 19:02, , 3F
想問,指標可以運用的地方是?目前只知道抓變數的位置
08/04 19:02, 3F
指標是儲存記憶體位址的變數~(應該吧...)

08/04 20:27, , 4F
恭喜你得到記憶體溢位的高級技能
08/04 20:27, 4F
溢位的話,是指我寫入的是無意義未定義的記憶體空間嗎? ※ 編輯: xjpjeass (219.80.129.226), 08/04/2015 20:49:43 ※ 編輯: xjpjeass (219.80.129.226), 08/04/2015 20:50:33

08/04 22:42, , 5F
利用溢位修改執行緒堆疊內容,可是hack的超高技巧!
08/04 22:42, 5F
是所謂的緩衝區溢位嗎? 我無言了0.0 ※ 編輯: xjpjeass (219.80.129.226), 08/04/2015 23:58:36 ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:01:34

08/05 00:05, , 6F
所以如果要達成那個目標,要先跟電腦宣告要使用的記憶體
08/05 00:05, 6F

08/05 00:05, , 7F
配置,有明確的範圍才能使用其中的位址是嗎?
08/05 00:05, 7F

08/05 00:18, , 8F
若照程式碼來看,pUNM+1 = &times
08/05 00:18, 8F

08/05 00:19, , 9F
所以執行後times = 124 ?
08/05 00:19, 9F
欸?times是宣告用來當作計算迴圈次數的變數,應該跟NUM沒什麼關係啊.....

08/05 00:24, , 10F
至於為什麼,跟堆疊stack有關
08/05 00:24, 10F
啊,我好像大概了解你的意思了....所以這樣第一次以後就無法執行了吧。然後,我在去把那段看熟好了.... ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:26:38

08/05 00:28, , 11F
在system("pause");自己印看看times吧
08/05 00:28, 11F
好我試試看吧 ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:28:31 ※ 編輯: xjpjeass (219.80.129.226), 08/05/2015 00:29:27

08/27 08:03, , 12F
原po你有當駭客的潛力!!
08/27 08:03, 12F
文章代碼(AID): #1Lm1_1sj (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Lm1_1sj (C_and_CPP)