2017年5月3日 星期三

常見問題:記憶體空間重疊

觀念

我們在宣告array時,一般,電腦會以8個空間為單位切割給array,例如:宣告A[100],則電腦會切割96或104的空間給這個陣列變數A,但是切割空間96給該array一定不夠用,所以就是給它104的空間了。  P.S.  96=8*12、104=8*13

發生空間重疊的原因

如果我們寫一個程式,在main函式內宣告多個陣列變數,而該程式又同時宣告多個子函式(subfunction),而每個子函式又宣告了許多變數時,此時,可能發生不同的變數共用記憶體空間的問題,此現象稱記憶體空間重疊

舉例


在mos_to_char函式中,並沒有使用到keyword[50]這個陣列


然後在跑完mos_to_char函式後,keyword[50]的內容被複寫掉了

這就是典型的記憶體空間重疊現象

解決辦法

把該程式內大於20的陣列都改成128的大小。
why? 因為128剛好是8的倍數,也是程式切割空間的位置點,這樣子去做宣告,就不會讓程式有複寫的問題。

沒有留言:

張貼留言