回复 17楼 sfl514318924
結構的性質與數組相同。C語言規定不能直接傳遞數組,同樣也不應直接傳遞結構,穩妥的做法是使用指針傳遞,返回指針,而不是直接返回整個結構。C語言之所以不直接傳遞數組的原因,是因爲數組的規模未知,用於參數傳遞和返回的棧空間很小,未必可以容納數組的數據,故硬性規定凡數組傳遞必用指針。同樣的道理,結構的規模也是未知的,因爲結構能包括的數據類型很多,很可能裏面藏有數組(對C++來説,結構與類無異),故本來也不應這樣直接傳遞和返回結構的。須知,函數返回值給調用者的機制,是在棧中開闢臨時空間複製返回數據,在調用取得後自動廢棄,返回結構實體的動作,等於返回整個數組一樣是大忌,在實際執行中,天知道編譯器分配的棧空間剩餘多少給這個結構實體可用,當它超越實際邊界,就出現注入外部未知空間的危險——這是運行時錯誤,無法在設計和編譯階段測試出來的。
某些防護軟件不報錯,並不等於這種危險動作沒有問題,至多說360有點過敏,但它確實偵測到危險動作,頂多是報與不報的問題,報比隱瞞好。
[
本帖最后由 TonyDeng 于 2011-9-11 15:31 编辑 ]