This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHCC3235MOD:发出连续请求时 HttpClient 库中的堆内存溢出

Guru**** 2382450 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1314965/launchcc3235mod-heap-memory-overflow-of-in-httpclient-library-while-making-consecutive-request

器件型号:LAUNCHCC3235MOD

您好!

我已经通过修改 SDK 6.10版提供的 HttpGet 示例代码连续执行了20个 HTTP POST。

for (i =0;i <20;I++)
{

UART_PRINT ("\n\n\r\n***** 正在执行%d ***** \n\n\r\n", I);

HttpPost ();
睡眠(2);

以下是 HttpPost 函数的序列。 对前16个请求来说已经可以了、但在这之后由于堆内存溢出而无法建立连接。

HttpClient_create

HttpClient_setHeader

HttpClient_Connect

HttpClient_sendRequest

HttpClient_readResponse 正文

HttpClient_disconnect

HttpClient_Destroy

下面是我从 ROV 看到的增量。 堆内存使用率会增加每个请求。

请帮助我解决此问题。

此致、

圣达尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我刚才已经验证在使用参考 HttpGet 示例时没有内存泄漏。

    如果您基于此示例、则应验证所做的更改。

    您是否在  HttpPost()中分配数据?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kobi:

    感谢您的检查。 我还省去了与 JSON 相关的代码并再次进行了测试。

    HTTP 客户端代码工作正常。 当我在函数中添加以下代码时、在进行 HTTP 连接时会触发错误。

    char jtemplate []=
    "{\"Sec\":string,\"minute\":string,\"hour\":string,"
    "\"Day\"":string、\"Month\"":string、\"Year\"":string、\"BitRate\"":string、\"IfUppgrade \":string、\"IfAlarm\":string、\"Info\":string};

    REt = json_init (jtemplate、data、strlen (data));
    if (ret < 0)
    {
    log_message ("JSON_init 失败"、ret);

    请帮助我解决此问题。

    此致、

    圣达尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kobi:

    这是  WSON_init 函数。

    int16_t JSON_init (char *template、
    char *文本、
    uint16_t textLen)
    {
    int16_t RetVal;

    RetVal = JSON_createTemplate (&HttpJsonObj.templateHandle、模板、
    strlen (模板);

    if (RetVal < 0)
    {
    Log_message ("错误:%d,无法创建模板\r\n",RetVal);
    返回(-1);

    返回值=
    JSON_CreateObject (&HttpJsonObj.jsonObjHandle、HttpJsonObj.templateHandle、
    1024);
    if (RetVal < 0)
    {
    /*创建对象失败,释放分配的模板*/
    json_destroyTemplate (HttpJsonObj.templateHandle);
    Log_message ("错误:%d,无法创建 JSON 对象\r\n",RetVal);
    返回(-1);

    //log_message ("响应:%s_1 \r\n "、文本);

    RetVal = JSON_Parse (HttpJsonObj.jsonObjHandle、Text、textLen);

    if (RetVal < 0)
    {
    Log_message ("错误:%d,无法解析"
    "接收到的 JSON 文件\r\n "、
    返回值);

    /*解析 JSON 文件失败,释放分配的内存*/
    json_destroy();

    返回(返回值);

    返回(0);

    此致、

    圣达尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kobi:

    感谢你的帮助。 我在末尾错过了 JSON_DESELECT 函数。

    此致、

    圣达尔