错误日志如下:
Exception Entry--->>>

mcause 38000005, mepc 2302934c, mtval 65746194
=== backtrace_trap start ===
-f -p 2302934c 23013b02 23013b02 2300b70e 23004662 2301367e 2302edf4
backtrace_trap: reached task deathbed!!!
=== backtrace_trap end ===

通过map文件定位是
.text.get_object_item
0x0000000023029328 0x90 prebuild/lib/cjson.a(cJSON.o)
.text.add_item_to_array
0x00000000230293b8 0x40 prebuild/lib/cjson.a(cJSON.o)
.text.print_string_ptr
0x00000000230293f8 0x1ac prebuild/lib/cjson.a(cJSON.o)

代码如下

        int ret = -1 ;
	char *payload = NULL;
	cJSON *item;
	cJSON *root;
	char *str = (char*)aos_malloc(4);
	root = cJSON_CreateObject();
	if(root == NULL)
	{
		return;
	}
	sprintf(str,"%d",led.power);
	cJSON_AddStringToObject(root,PROPERTY_POWERSTATE,str);
	payload = cJSON_PrintUnformatted(root);
	if(payload == NULL)
	{
		goto exit;
	}
	printf("--------->%s\n",payload);
	cloud_packet_send(0,MSG_TYPE_REPORT,payload,strlen(payload));
	hal_free(payload);
	hal_free(str);
exit:;
	cJSON_Delete(root);
	hal_free(root);

char *str = (char*)aos_malloc(4);如果换成char *str也会导致程序崩溃
非常简单的代码,居然会出错,目前还没搞清楚出错的原因,麻烦帮忙看下 ,感谢!

    @huzhiqiang sprintf里的led.power改成ret,屏蔽hal_free后未见死机。请根据你的实际代码确认4个字节空间是否足够?hal_free是否合理?

    YafeiJin 4字节空间足够,led.power就是一个二值量,貌似是申请小内存很容易造成内存碎片,hal_free不是出问题的地方。就是有点疑惑内存使用的过程中是不是有什么需要注意的地方?

      Write a Reply...
      @ 2025 Bouffalo Lab (Nanjing) Co., Ltd. All rights reserved.