调用了cjson 接口进行数据解析,高概率出现解析失败,而且之前已经测过解析是没问题的。
1.怀疑是解析所在的任务栈空间不够,扩大到6K仍然不行,而且malloc按理同栈没关系。
2.怀疑是rt_malloc没走到,走了malloc,底层写死替换成rt_malloc测试仍然复现。
3.怀疑是rt_malloc的空间太大到?实际打印发现分配大小也就40字节,而且通过:
void heap_info_show(void)
{
rt_uint32_t total,used,max_used;
rt_memory_info(&total,&used,&max_used);
rt_kprintf("\r\nMem:Total---Used---Left---MaxUsed\r\nMem:%d---%d---%d---%d\r\n",total,used,(total-used),max_used);
}打印出内存信息发现空间还很大。
4.其他原因都排查,那么就剩下越界了,果然在前面的某个拷贝时存在可能性,但也看不出来,最后将memcpy拷贝的数据长度打印出来发现:25344,数据怎么这么大,这是才想起来,这里的数据长度2字节,但是大端模式,我直接使用了,要先转换成小端模式才能用。
Payload-No-Decrypt:25344-104##############
总结:对端数据包的中的size是大端模式,直接使用该字节数据进行拷贝就越界了。越界导致后面的malloc分配失败。一个小问题历时3小时,各种排查