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