我知道这个话题在StackOverflow上有很多答案,它们非常有帮助,但我不确定一件事。假设我有funcA和funcB:
char * funcA()
{
char * arr = malloc(sizeof(char) * 20);
//store data in arr...
return arr;
}
void funcB()
{
char * arr;
while(up to some finite value)
{
arr = funcA();
//do stuff with array
/* Do I perform these two lines here every iteration?*/
free(arr)
arr = NULL;
}
/*Or do I perform it only once, at the end of the loop?*/
free(arr)
arr = NULL;
}
我认为每次迭代都应该释放 arr
。或者每次迭代只是“覆盖”arr
中的数据,因此只在循环结束时调用free就可以了吗?正确的做法是什么?谢谢。
funcA()
时,你都会删除之前分配的任何“内存”,导致该块RAM被分配但丢失。你必须在使用完后释放该块,或者至少跟踪malloc()给你的指针。 - Marc Bmalloc
只能有一个free
。 - Kenneymalloc
都会分配一些内存。每次调用free
都会释放一些内存。您想要释放您分配的每个内存块,还是只释放最后一个? - user253751malloc
,必须有一个free
,否则就会出现 内存泄漏。 - t0mm13b