如果在函数内部调用了free(),那么它是否仅在本地释放?

时间:2019-03-17 15:58:27

标签: c function memory-management free realloc

仍然学习分配和释放的绳索,我对某些事情感到好奇。

假设您为数组分配内存:

int *array = malloc(5 * sizeof(int));

您将数组发送给一个函数,然后在其中重新分配它。函数参数必须是指向数组(或&array)的双指针,否则重新分配只能在本地进行。

如果您还想释放(释放)另一个函数中的数组,它也必须是双指针吗?释放功能只会在本地发生吗?如果没有,那在这方面与重新分配有何不同?

1 个答案:

答案 0 :(得分:7)

否,free()会全局释放内存,就像malloc()会全局分配内存一样。就是说,分配了内存,并且提供了指向它的指针的可访问性(函数参数,函数返回值,全局变量),它将保持分配状态并可以无限期访问-直到被释放或程序退出(或泄漏);没有更长的有效内存指针)。并且已释放的已分配内存将无限期释放。可以通过另一种分配再次使它可用,但这是偶然的。

如果将指向已分配内存的指针传递给一个函数,并且该函数将其释放,则它将被调用代码释放。调用代码需要知道被调用函数已释放内存,因此释放内存后它不会尝试使用内存。