超范围读写造成的破坏

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内存已经分配成功,但是操作越过了内存的边界。

猜你喜欢

转载自blog.csdn.net/ngany/article/details/85205478