前言
由于用到了cjson 序列化与反序列化,用到了动态内存管理。实际开发中发现调用cJSON_Init()函数使用nrf库的nrf_malloc时,cjson解析超过115字节长度字符串系统异常死机。
问题描述
可以看到cJSON_Init();内部如下:
实现了cJSON_free cJSON_malloc函数指针的赋值。
nrf内存块的大小可自定义设置,如下:
问题解决
折腾了两个多小时,最终通过查看nrf关于内存部分的使用说明,如下:
查看前面出问题的设置:
SMALL_BLOCK 设置比 XSMALL_BLOCK小,修改如下:
系统恢复正常。
问题总结
nrf的内存操作部分,没有按照category前后顺序大小设置好内存块大小,导致实际使用申请内存大于当前块大小,往相邻更大的category(实际配置小于前面的块,如small比xsmall配置的小)去申请时造成系统异常死机。
更进一步的,nrf底层逻辑上为什么出现这个现象,有空深究