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

问题描述 投票:2回答:1

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

假设您为数组分配内存:

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

您将数组发送到函数并在那里重新分配。函数参数必须是指向数组(或数组)的双指针,否则重新分配只能在本地进行。

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

c function memory-management free realloc
1个回答
7
投票

不,free()在全球范围内释放内存,就像malloc()在全球范围内分配内存一样。也就是说,内存被分配,如果可以访问它的指针(函数参数,函数返回值,全局变量),它将无限期地保持分配和可访问 - 直到释放或程序退出(或它被泄露;没有更长的有效可访问内存指针)。释放的已分配内存将无限期释放。它可能会被另一个分配再次提供,但这是巧合。

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

© www.soinside.com 2019 - 2024. All rights reserved.