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

作者: xjpjeass (人人)   2015-08-04 10:13:19
以下是我打的程式碼
#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
作者: Feis (永遠睡不著 @@)   2015-08-04 10:35:00
後面四個不只無法寫入,連是否存在都是個問題~
作者: kwpn (ITSST)   2015-08-04 13:06:00
在C++裡你需要用到多少記憶體,都要明顯地配置清楚.
作者: M013020058 (帥翰)   2015-08-04 19:02:00
想問,指標可以運用的地方是?目前只知道抓變數的位置
作者: stupid0319 (徵女友)   2015-08-04 20:27:00
恭喜你得到記憶體溢位的高級技能利用溢位修改執行緒堆疊內容,可是hack的超高技巧!
作者: xjpjeass (人人)   2015-08-05 00:05:00
所以如果要達成那個目標,要先跟電腦宣告要使用的記憶體配置,有明確的範圍才能使用其中的位址是嗎?
作者: stupid0319 (徵女友)   2015-08-05 00:18:00
若照程式碼來看,pUNM+1 = &times所以執行後times = 124 ?至於為什麼,跟堆疊stack有關在system("pause");自己印看看times吧

Links booklink

Contact Us: admin [ a t ] ucptt.com