Arduino没有释放RAM内存

时间:2017-02-25 05:41:13

标签: c++ memory arduino md5 esp8266

我使用Arduino mega与MD5库和ESP8266与SoftwareSerial。问题是370循环后,由于内存不足,Arduino自动重启。我使用FreeMemory进行故障排除,我注意到问题是每个循环的可用内存减少了。这是奇怪的行为,因为它只在我使用AT命令和MD5时出现,但是如果我在两个草图中分离草图它们正常工作而没有内存问题。 我的原始草图是一个相当复杂的,但我简化为实例所示的基本代码,以便更清楚,行为是相同的,所以如果我修复它,我将能够修复我原来的草图

   #footer { /* position must be absolute and bottom must be 0 */
    height: 100px;
    width: 100%;
    background: red;
    position: fixed;
    bottom: 0;
}

谢谢!

1 个答案:

答案 0 :(得分:4)

以下是make_hash的源代码:

unsigned char* MD5::make_hash(const void *arg)
{
    MD5_CTX context;
    unsigned char * hash = (unsigned char *) malloc(BLOCK_SIZE);
    MD5Init(&context);
    MD5Update(&context, arg, strlen((char*)arg));
    MD5Final(hash, &context);
    return hash;
}

如您所见,返回的malloc()变量中有一个hash。因此,您应该在每次循环迭代结束时调用free(hash)

如果您需要保留hash,请将其放在全局范围中,并在setup()函数中仅 创建 <。 / p>