【问题标题】:Should I use free() in Subfunction after malloc()?我应该在 malloc() 之后在子函数中使用 free() 吗?
【发布时间】:2021-05-24 11:40:34
【问题描述】:

在我的项目中有一个子功能。在这个函数中,我需要临时存储我的数据。所以我用malloc(),不知道有没有必要用free()

void *hash2(unsigned char *mes, element_t d)
{
    size_t iterations = strlen(mes) / 8;
    unsigned char *rtemp = malloc(32 * sizeof(char));
    SHA256(mes, iterations, rtemp);
    element_from_hash(d, rtemp, 32);
    free(rtemp);
}

【问题讨论】:

    标签: c malloc dynamic-memory-allocation free


    【解决方案1】:

    是的,由于您不再使用分配的内存,您必须释放它。

    从函数调用返回后,您将无法访问分配的内存,因此无法释放它。因此,您需要在离开函数作用域之前将指针传递给free()(如 sn-p 所示)以避免内存泄漏。

    【讨论】:

      【解决方案2】:

      正如当前答案中已经说明的那样,如果您在函数内分配内存,则应该释放不再需要的任何内存,不释放它并且不返回任何指向它的指针将导致内存泄漏。

      请注意,您的函数*hash2(...),具有void* 返回类型,必须返回一个值,如果您不需要它,请改用void

      在您的特定代码中,您似乎不需要使用malloc,您可以使用本地数组unsigned char rtemp[32];malloc 是一个涉及系统调用的繁重函数,如果你能避免它,你应该这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-10
        • 1970-01-01
        • 2015-08-10
        • 2021-07-14
        • 2014-05-05
        • 1970-01-01
        相关资源
        最近更新 更多