这个代码在裸机运行情况下运行 会出现过一会kk字符串为空的问题 但不进入hardfault handler
uint8_t *notify_str = (uint8_t *)cJSON_PrintUnformatted(root);

      unsigned int notify_len = strlen(notify_str);
      printf("notify_len:%d \r\n",notify_len);




      snprintf(num_string,sizeof(num_string),"%d",notify_len);


      sprintf(num_stringg,"0,%s,",num_string);


      sprintf(temp,"AT+GATTSEND=%s",num_stringg);

      //unsigned char output[370];

      unsigned char *j = malloc(31);
      if(j == NULL)
            {
          printred("malloc failed\r\n");
            }


      j = temp;

      //sprintf(output,temp,j);
      printf("j:    %s \r\n",j);

      char *result = malloc(strlen(j)+strlen(notify_str)+1);
      printred("result:%p \r\n",result);
      if(result == NULL)
      {
          printred("malloc failed\r\n");
      }

      strcpy(result,j);
      char *jj = strcat(result,notify_str);


      char *res1 = malloc(strlen(jj)+strlen("\r\n")+1);
      if(res1 == NULL)
      {
          printred("malloc failed\r\n");
      }



      strcpy(res1,jj);
      char *kk = strcat(res1,"\r\n");




      //printf("output:%s \r\n",strcat());

      //uint8_t *output_s = strcat(result,notify_str);
      //output_s = strcat(output_s,"\r\n");

      UART0_SendString(kk,strlen(kk));
      printf("output_s:%s\r\n",kk);
      printf("strlen output_s:%d\r\n",strlen(kk));


      free(result);
      //free(j);
      free(res1);


①不建议使用C语言的malloc函数,可能有内存碎片问题。建议使用系统的申请和释放:tmos_msg_allocate;

②kk作为返回值是地址,你的目的应该是将res1补充回车换行,应该是直接sendstring res1。同时打印地址用%s也是有问题的。


破案了 

unsigned char *j = malloc(31);
      if(j == NULL)
            {
          printred("malloc failed\r\n");
            }


      j = temp;

这里导致内存泄漏 用IDE的cppcheck查出问题 memory leak 问了百度的文心一言


image.png

如图


只有登录才能回复,可以选择微信账号登录