调用os_malloc时异常重启

meeke
Posts: 28
Joined: Fri Apr 01, 2016 10:19 am

调用os_malloc时异常重启

Postby meeke » Thu Nov 03, 2016 10:48 am

在cJson解析时调用malloc函数前打印

Code: Select all

static ICACHE_FLASH_ATTR cJSON *cJSON_New_Item(void)
{
   os_printf("\ncJSON_malloc!!!!!! sizeof(cJSON):%d,sys heap size:%d\n",sizeof(cJSON),system_get_free_heap_size());
   cJSON* node = (cJSON*)cJSON_malloc(sizeof(cJSON));
   os_printf("cJSON_malloc,node :%08x,sys heap size:%d\n",node,system_get_free_heap_size());
   if (node) os_memset(node,0,sizeof(cJSON));
   return node;
}

明明还有足够内存空间的情况下,为何在os_malloc分配内存里异常重启?
下面是我的重启时候的log:
recv json{"datetime":"20161103101953"}
value:{"datetime":"20161103101953"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:26312
cJSON_malloc,node :3fff2f80,sys heap size:26264
after cJSON_New_Item value:{"datetime":"20161103101953"}
parse_value: {"datetime":"20161103101953"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:26264
cJSON_malloc,node :3fff2fb0,sys heap size:26216
parse_value: "20161103101953"}
"datetime":20161103101953
MQTT: Sending, type: 3, id: 0004
mqtt publish
MQTT: received MQTT_MSG_TYPE_PUBACK, finish QoS1 publish
Recv SNR:0002
recv json:{"errorCode":0,"errorMsg":"OK"}
value:{"errorCode":0,"errorMsg":"OK"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:26168
Fatal exception
ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x40100000, len 2408, room 16
tail 8
chksum 0xe5
load 0x3ffe8000, len 776, room 0
tail 8
chksum 0x84
load 0x3ffe8310, len 632, room 0
tail 8
chksum 0xd8
csum 0xd8

2nd boot version : 1.6
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

屸?俷鞉r傭n|?宭巔rl屸r抣宩
reset reason: 1
epc1=0x40000f68, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
SDK version:2.0.0(656edbf)
run user1.bin @ 0x00001000
free heap size:40280
user flag:user1.bin
start dns
mode : sta(60:01:94:03:17:f6)
add if0
scandone
state: 0 -> 2 (b0)
tsm12m_wake_up
Get_VBAT_ADC: 862,Battery: 30%
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 2
cnt

connected with ConSmart, channel 1
dhcp client start...
ip:192.168.1.122,mask:255.255.255.0,gw:192.168.1.1


下面是同样的程序,没重启时的报文:
recv json{"datetime":"20161103102009"}
value:{"datetime":"20161103102009"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:25168
cJSON_malloc,node :3fff2e68,sys heap size:25120
after cJSON_New_Item value:{"datetime":"20161103102009"}
parse_value: {"datetime":"20161103102009"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:25120
cJSON_malloc,node :3fff2f88,sys heap size:25072
parse_value: "20161103102009"}
"datetime":20161103102009
MQTT: Sending, type: 3, id: 0004
mqtt publish
MQTT: received MQTT_MSG_TYPE_PUBACK, finish QoS1 publish
Recv SNR:0002
recv json:{"errorCode":0,"errorMsg":"OK"}
value:{"errorCode":0,"errorMsg":"OK"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:25024
cJSON_malloc,node :3fff2fd0,sys heap size:24976
after cJSON_New_Item value:{"errorCode":0,"errorMsg":"OK"}
parse_value: {"errorCode":0,"errorMsg":"OK"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:24976
cJSON_malloc,node :3fff3000,sys heap size:24928
parse_value: 0,"errorMsg":"OK"}

cJSON_malloc!!!!!! sizeof(cJSON):40,sys heap size:24888
cJSON_malloc,node :3fff4298,sys heap size:24840
parse_value: "OK"}
"errorCode":0
"errorMsg":OK

pm open,type:2 0

meeke
Posts: 28
Joined: Fri Apr 01, 2016 10:19 am

Re: 调用os_malloc时异常重启

Postby meeke » Sat Nov 05, 2016 10:52 am

后面发现是我调用cJson_Parse()时,只在结尾调用了cJson_Delete(),而在解析错误时的return没有cJson_Delete()掉内存,导致内存泄露。

但是偶尔还是有重启现象,根据espc1的地址,得知是40231688 <udp_input>:中间出现的

Who is online

Users browsing this forum: No registered users and 59 guests