觀念
我們在宣告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的倍數,也是程式切割空間的位置點,這樣子去做宣告,就不會讓程式有複寫的問題。
沒有留言:
張貼留言