超範圍讀寫造成的破壞
阿新 • • 發佈:2018-12-25
1、malloc/free要配對使用。記憶體分配了不釋放我們稱為記憶體洩漏(Memory Leak),記憶體洩漏多了遲早會出現Out of memory的錯誤,再分配記憶體就會失敗。當然釋放時也只能釋放分配出來的記憶體,釋放無效的記憶體或者重複free都是不行的,會造成程式crash。分配多少記憶體用多少,分配了100 B就只能用100 B,不管是讀還是寫,都只能在這個範圍內,讀多了會讀到隨機的資料,寫多了會造成隨機的破壞,這種情況我們稱為緩衝區溢位(Buffer Overflow),這是非常嚴重的。
2、//傳送16為資料
void Sendu16DataFrame( uint16_t data,
uint32_t Write_Addr)
{
char buff[10];
sprintf(buff, "%-8d", data);
SendFrame(buff, 5, Write_Addr, UART_DATA);
}
原本老程式碼中buff定義為 char buff[5];
在執行sprintf(buff, "%-8d", data); 語句時超出範圍,造成隨機破壞,可能將呼叫Sendu16DataFrame的函式中儲存的隨機變數造成破壞。
buff記憶體已經分配成功,但是操作越過了記憶體的邊界。