C語言由於可以直接操作內存,給我們的編程帶來了便利,同時也帶來了內存寫越界之類的問題,常常造成我們的系統crash。下面總結了我在工作中碰到的導致內存越界的各種場景,以供分析此類問題時作個參考。
1、直接寫越界,包括1)棧空間變量寫越界覆蓋掉函數返回地址,導致函數返回時crash。2)全局變量寫越界,導致覆蓋掉符號表中排在這個全局變量後面的全局變量的值。
2、未初始化指針變量的值寫操作。
3、指針釋放了未置空,後續又被視爲仍有效而進行寫操作。
4、局部變量在生存期外被寫,如1)一個線程寫了另一個線程的局部變量。2)函數返回的局部變量被寫。
5、數組沒有初始化,接着調用strncpy只拷貝了覆蓋掉部分空間,剩餘空間可能是一個隨機值,之後繼續拿來使用。
(完)