1. 程式人生 > >超範圍讀寫造成的破壞

超範圍讀寫造成的破壞

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記憶體已經分配成功,但是操作越過了記憶體的邊界。