如果有人能帮助我完全理解以下代码之间的差异,我将非常高兴:
// Code (1) void f1 ( void ){ int * ptr1 = malloc ( sizeof(int) ); }
和
// Code (2) void f2 ( void ){ int * ptr2 = malloc ( sizeof(int) ); free(ptr2); }
据我所知,自由的指令是重新分配使用的内存是有用的,但另一方面,我知道每次我们调用一个函数g,如果这里有被宣布,它们将被创建和销毁的新变量(即在执行g之后取消分配,对吗?
所以:
我们是否需要在Code(2)中使用免费的指令,或者它是多余的?(但可能建议使代码更清晰)
谢谢
Ps:您可能也有兴趣帮助我解决之前的相关问题.在那里,一些用户建议使用动态分配内存,我试图理解为什么/如何.
号malloc
不会释放分配的内存.您需要使用free
来释放分配的块.
情况也是如此,在程序(main
函数)结束时,系统会自动释放分配的内存,但最好明确释放它.
永远记住动态分配内存的生命周期是程序结束,如果没有特别解除分配.
如前所述,分配的内存malloc
应该是未分配的free
,否则你会得到内存泄漏.令你困惑的是ptr1
var本身是未分配的(不是它指向的内存).分配的内存不是变量.因此,当您退出时f1
,您无法再访问已分配的内存,因为您丢失了地址.顺便说一句,你没有解释为什么你在上一个问题中需要新地址.