Re: [問題] 指標的用法....
※ 引述《BlueSkyDream (人生是後悔的連續)》之銘言:
: 請問一下
: 目前使用的是Keil C
: 在定義一個陣列如下的情況
: BYTE data Data[2];
這邊只宣告了兩個byte的記憶體
假設Data是宣告在0x00001000
所以
可以使用0x00001000與0x00001001
: 之後用到Data[]來計算的過程如下
: ((WORD *)Data)[0] = 一堆計算式
這邊是將一堆算式的結果
塞到0x00001000與0x00001001
因為你轉型成WORD*
一次是2byte
: ((WORD *)Data)[1] = 一堆計算式
這邊是將一堆算式的結果
塞到0x00001002與0x00001003
: 請問在((WORD *)Data)[1]計算完後會不會破壞到((WORD *)Data)[0]內的資料?
: 若不會,那原因是?
所以((WORD *)Data)[1]不會覆蓋掉((WORD *)Data)[0]內的資料
但是..
這個寫法是非常嚴重的錯誤
假設 BYTE data Data[2]; 是區域變數
那麼是宣告在堆疊中
因此
你毀掉堆疊中某個無辜的記憶體
可能是覆寫別人的變數(看起來沒事)
可是是毀掉某個指標(代表它亂指了..暫時沒事..可是當一讀指標就知道了)
可能是毀掉返回位址(程式肯定當掉)
如果是全域變數的話
可能是毀掉別人的變數
可能是寫到合法位址..但沒人使用(這時候就沒事)
可能是寫到不合法位址(程式肯定當掉)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.127.112
→
10/18 21:27, , 1F
10/18 21:27, 1F
→
10/18 21:29, , 2F
10/18 21:29, 2F
→
10/19 00:11, , 3F
10/19 00:11, 3F
→
10/19 00:12, , 4F
10/19 00:12, 4F
→
10/19 00:13, , 5F
10/19 00:13, 5F
討論串 (同標題文章)