我应该在 malloc() 之后在 Subfunction 中使用 free() 吗?

Should I use free() in Subfunction after malloc()?

在我的项目中有一个子函数。在这个函数中,我需要暂时存储我的数据。所以我用了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);
}

是的,因为您不再使用分配的内存,所以必须释放它。

一旦您从函数调用中 return,您将无法访问分配的内存,因此无法释放它。因此,您需要在离开函数作用域(如代码片段所示)之前将指针传递给 free() 以避免内存泄漏。

如当前答案中所述,您应该释放不再需要的任何内存,如果您在函数内分配内存,而不是释放它而不是 returning 任何指向它的指针将导致内存泄漏。

请注意,您的函数 *hash2(...) 具有 void* return 类型,必须 return 一个值,如果不需要,请使用 void 代替。

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