#c #malloc #dynamic-memory-allocation #free
#c #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);
}
Ответ №1:
Как уже говорилось в настоящем ответе, вы должны освободить любую память, которая больше не нужна, если вы выделяете память внутри функции, не освобождая ее и не возвращая на нее указатель, это приведет к утечке памяти.
Обратите внимание, что ваша функция *hash2(...)
, имеющая void*
возвращаемый тип, должна возвращать значение, если вам это не нужно, используйте void
вместо этого.
В вашем конкретном коде кажется, что вам все равно не нужно использовать malloc
, вы можете использовать локальный массив unsigned char rtemp[32];
. malloc
это тяжелая функция, которая включает системные вызовы, если вы можете избежать этого, вы должны.
Ответ №2:
Да, поскольку вы больше не используете выделенную память, вы должны освободить ее.
Как только вы вернетесь из вызова функции, у вас не будет возможности получить доступ к выделенной памяти, следовательно, ее нельзя освободить. Итак, вам нужно передать указатель на free()
перед выходом из области действия функции (как показано во фрагменте), чтобы избежать утечки памяти.