【问题标题】:If free() is called inside a function, does it only free locally?如果在函数内部调用 free(),它是否只在本地释放?
【发布时间】:2019-08-08 02:10:47
【问题描述】:
仍在学习分配和解除分配的技巧,我对某些事情感到好奇。
假设你为一个数组分配内存:
int *array = malloc(5 * sizeof(int));
您将数组发送到一个函数并在那里重新分配它。函数参数必须是指向数组(或 &array)的双指针,否则重新分配只会在本地进行。
如果您还想在另一个函数中释放(解除分配)数组,它是否也必须是双指针?函数中的释放只会在本地发生吗?如果不是,在这方面与重新分配有何不同?
【问题讨论】:
标签:
c
function
memory-management
free
realloc
【解决方案1】:
不,free() 全局释放内存,就像malloc() 全局分配内存一样。也就是说,内存已分配,并且如果指向它的指针可以访问(函数参数、函数返回值、全局变量),它会一直保持分配和可访问状态——直到被释放或程序退出(或者它被泄露;没有不再是指向内存的有效可访问指针)。释放的已分配内存将无限期释放。它可能会通过另一个分配再次可用,但这是巧合。
如果你将一个指向分配内存的指针传递给一个函数并且该函数释放它,它就会被释放给调用代码。调用代码需要知道被调用的函数释放了内存,因此它不会在释放后尝试使用内存。