仍然学习分配和释放的绳索,我对某些事情感到好奇。
假设您为数组分配内存:
int *array = malloc(5 * sizeof(int));
您将数组发送给一个函数,然后在其中重新分配它。函数参数必须是指向数组(或&array)的双指针,否则重新分配只能在本地进行。
如果您还想释放(释放)另一个函数中的数组,它也必须是双指针吗?释放功能只会在本地发生吗?如果没有,那在这方面与重新分配有何不同?
答案 0 :(得分:7)
否,free()
会全局释放内存,就像malloc()
会全局分配内存一样。就是说,分配了内存,并且提供了指向它的指针的可访问性(函数参数,函数返回值,全局变量),它将保持分配状态并可以无限期访问-直到被释放或程序退出(或泄漏);没有更长的有效内存指针)。并且已释放的已分配内存将无限期释放。可以通过另一种分配再次使它可用,但这是偶然的。
如果将指向已分配内存的指针传递给一个函数,并且该函数将其释放,则它将被调用代码释放。调用代码需要知道被调用函数已释放内存,因此释放内存后它不会尝试使用内存。