各位前輩好,中正資工乙組計概的題目有含程式設計,
有補習,但非本科生,有找工程師的朋友問,
不過朋友們遠離這一塊比較久所以沒辦法給我比較詳細易懂的說明,
於是來這邊請教各位,請多多指教。
之後可能還會往前問前幾年的,總之先一步一步來。
相關題目內出現的語法都有先自己GOOGLE去理解,化成自己的想法,
還請糾正或是給予一點理解的技巧(?)
第一題:
https://i.imgur.com/extW8nK.png
https://i.imgur.com/UrbrLuL.png
因為沒解答所以自己打了程式碼跑答案出來參考。
自己理解:
題目中宣告二維陣列,總共3X3,
由上而下由左而右,0列~2列,0行~2行,依序填入元素1~9
*ptr1輸出值為1,這個不太懂,指標變數不是指向記憶體位址嗎?
還是在這邊就變成了指向陣列的第一個元素,也就是1嗎?
*(ptr1+LOC(1,1)) 1+4(陣列1x1之值)=5
ptr1[LOC(2,1)] 陣列2x1之值=8
ptr1[5]/5 陣列第五個元素除以5,5/5=1
後面的char就無法理解了...
第二題:
https://i.imgur.com/47ASzyR.png
https://i.imgur.com/teRSMau.png
前半的函數呼叫是將兩值互換。
而後面主程式碼,
X1=Y1位址
Y1=Z1位址
X2=Y2位址
Y2=Z2位址
所以第一次printf
*y1就是z1的值10
*y2就是z2的值20
**x1跟**x2自己是理解成連續取兩次位址,
所以x1=y1=z1=10、x2=y2=z2=20
然後呼叫函數將兩值互換。
第三題:
https://i.imgur.com/1aC6L3q.png
考的是記憶體漏洞跟記憶體釋放,第一次聽到,所以自己去GOOGLE。
a:
(1)
Ans:insert a free(ptr) immediately after L10
原因:已經printf結束了,所以就釋放記憶體避免造成記憶體漏洞。
(2)
不太確定,看起來是沒有問題?
(3)
不太確定,是不是應該要把L12的free給移除掉?
因為還在迴圈內,在那邊free的話資料就遺失了。
b:
garbage collection為程式會自動將被占用許久沒使用的記憶體給釋放的機制。