当前位置:  开发笔记 > 编程语言 > 正文

malloc会在函数结束时自动释放内存吗?

如何解决《malloc会在函数结束时自动释放内存吗?》经验,为你挑选了2个好方法。

如果有人能帮助我完全理解以下代码之间的差异,我将非常高兴:

// 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:您可能也有兴趣帮助我解决之前的相关问题.在那里,一些用户建议使用动态分配内存,我试图理解为什么/如何.



1> haccks..:

malloc不会释放分配的内存.您需要使用free来释放分配的块.
情况也是如此,在程序(main函数)结束时,系统会自动释放分配的内存,但最好明确释放它.

永远记住动态分配内存的生命周期是程序结束,如果没有特别解除分配.



2> Ilya..:

如前所述,分配的内存malloc应该是未分配的free,否则你会得到内存泄漏.令你困惑的是ptr1var本身是未分配的(不是它指向的内存).分配的内存不是变量.因此,当您退出时f1,您无法再访问已分配的内存,因为您丢失了地址.顺便说一句,你没有解释为什么你在上一个问题中需要新地址.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有