使用memset赋值数组导致越界的问题

uint8_t USART_RX_BUF[128] = {0};
USART_REC_LEN = 200;
memset(Save_Data.GPS_Buffer, 0, GPS_Buffer_Length);      //清空memcpy(Save_Data.GPS_Buffer, USART_RX_BUF, point); 	//保存数据
Save_Data.isGetData = true;
point = 0;
*** memset(USART_RX_BUF, 0, USART_REC_LEN); ***    //清空	
readyToparse = 1;

其中USART_RX_BUF数组的定义是uint8_t USART_RX_BUF[128] = {0};
但是USART_REC_LEN = 200;
USART_REC_LEN > 128,也就是*标处的代码是把数组越界赋值0了
又因为在RAM中全局变量或者是静态变量是在.bss或者.data数据段内相邻

所以赋值0也就把GPS_Buffer内的数值变为0了

进而导致了看似逻辑没什么问题,但是GPS_Buffer的数据是0

后面再遇到相似的问题时,也就是赋值成功,但后面又被清空的情况可以

考虑有没有地方越界了

posted @ 2026-04-02 18:26  太菜不摆  阅读(24)  评论(0)    收藏  举报