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