完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在cJson解析时调用malloc函数前打印
static ICACHE_FLASH_ATTR cJSON *cJSON_New_Item(void) { os_printf("ncJSON_malloc!!!!!! sizeof(cJSON):%d,sys heap size:%dn",sizeof(cJSON),system_get_free_heap_size()); cJSON* node = (cJSON*)cJSON_malloc(sizeof(cJSON)); os_printf("cJSON_malloc,node :%08x,sys heap size:%dn",node,system_get_free_heap_size()); if (node) os_memset(node,0,sizeof(cJSON)); return node; } 明明还有足够内存空间的情况下,为何在os_malloc分配内存里异常重启? 下面是我的重启时候的log: recv json{"datetime":"20161103101953"} 下面是同样的程序,没重启时的报文: recv json{"datetime":"20161103102009"} |
|
相关推荐
1个回答
|
|
在这个问题中,调用os_malloc时异常重启可能是由以下几个原因导致的:
1. **内存不足**:如果系统堆内存不足,调用malloc函数时可能会失败,导致异常重启。在您的代码中,您已经打印了系统堆大小,这有助于确定是否是内存不足的问题。 2. **堆损坏**:如果堆内存被损坏,调用malloc函数时可能会导致异常。这可能是由于内存越界、错误的内存释放或其他内存操作错误导致的。 3. **操作系统或硬件问题**:在某些情况下,操作系统或硬件问题可能导致调用malloc函数时出现异常。这可能包括内存泄漏、硬件故障或其他系统级问题。 4. **cJSON库的问题**:如果cJSON库本身存在问题,例如内存分配错误或其他bug,调用cJSON_malloc时可能会导致异常。 为了解决这个问题,您可以尝试以下步骤: 1. **检查内存使用情况**:确保在调用malloc之前,系统有足够的堆内存。您已经在代码中打印了堆大小,这有助于确定问题是否与内存不足有关。 2. **使用内存检查工具**:使用内存检查工具(如Valgrind)检查您的程序是否存在内存泄漏、内存越界或其他内存问题。 3. **逐步调试**:逐步调试您的代码,检查在调用malloc之前和之后的所有操作,以确定问题发生的具体位置。 4. **检查cJSON库**:确保您使用的cJSON库是最新版本,并且没有已知的内存分配问题。如果可能,尝试使用其他JSON解析库,看看问题是否仍然存在。 5. **优化内存分配**:检查您的代码,看看是否有优化内存分配的方法,例如使用更小的数据结构或减少不必要的内存分配。 6. **增加错误处理**:在调用malloc之后,添加错误处理代码,以便在内存分配失败时优雅地处理异常,而不是导致系统重启。 通过这些步骤,您应该能够确定问题的原因并采取适当的措施来解决它。 |
|
|
|
只有小组成员才能发言,加入小组>>
1123 浏览 1 评论
574浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 09:08 , Processed in 0.784887 second(s), Total 49, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号