ANSIC,垃圾收集器和函数环境数组,退出函数将取消数组?

whhtz7ly  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(74)

我需要编写一个函数,在其中声明一个新数组,然后我需要该数组留在内存中。。
我想知道哪种编程实践是达到这种结果的最佳实践,我也很想了解垃圾收集器在这种特定情况下是如何工作的
在这种情况下,如果我声明一个函数,并在里面初始化一个数组,如果我保持对函数外部地址的引用,一旦函数完成工作,它的环境不再存在,数组是否仍然可用,或者我是否有进一步的malloc或数组声明会意外地覆盖我以前的数组的风险?
另外,如果我在函数中使用malloc,分配的内存是否会一直保留,直到我释放它,不管我在哪里使用malloc?
感谢任何人提供的帮助。

7fyelxc5

7fyelxc51#

C中没有垃圾回收!

你应该读一本关于C的书:The Definitive C Book Guide and List,特别是关于指针,堆和堆栈。
如果你malloc一段内存,指针会存在于堆中,并且不会消失或“变得不可用”,直到在指针上调用free。它与函数的作用域无关,也称为堆栈帧。如果你在堆栈上声明了一个固定大小的数组,那么一旦堆栈展开,它就会超出作用域。
总之,你的最后一句话是正确的,如果你使用malloc,内存将在堆上分配,直到你调用free。

相关问题