如何在堆栈中功能调用中释放内存

时间:2016-02-07 05:00:34

标签: c memory-management

假设我有一个数组arr [10],然后我将所有元素复制到另一个数组arr2 [20]。我不再需要arr,所以我做arr = arr2将其指针移动到新数组。 arr [10]使用的内存是否仍在使用,还是自动释放?如果它仍然被使用,在重新分配指针之前有没有办法释放它?

2 个答案:

答案 0 :(得分:1)

如果您声明了int arr[10];之类的arr,那么它将存储在stack上,并在函数结束时释放。你通常不能免费堆栈内存功能。

如果您使用malloc()定义它,那么它将在堆上,您必须使用free()来释放它。否则它将是内存泄漏并在程序退出后被释放。但是,即使您遇到内存泄漏,由于virtual memory,您的计算机始终可以检索该内存。

答案 1 :(得分:0)

  

arr [10]使用的内存是否仍在使用,还是自动释放?

这取决于您实际声明数组的方式。

  • 如果您将其声明为自动变量,则在函数调用结束时会自动释放它。
  • 如果你做了一些动态分配,那么它会在函数调用结束后存在,你必须手动释放它。