我应该在 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
是一个涉及系统调用的重函数,如果你能避免它,你应该。
在我的项目中有一个子函数。在这个函数中,我需要暂时存储我的数据。所以我用了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
是一个涉及系统调用的重函数,如果你能避免它,你应该。