繁体   English   中英

malloc指针会导致内存泄漏?

[英]malloc pointer cause memory leak?

我有以下代码,这会导致内存泄漏,函数返回后,有很多未分配的内存,没有声明?

#include <stdlib.h>

struct test
{
    char * name;
    char * value;
};

void test_ok()
{
   int i;
   struct test * ok;

   for (i=0;i<10000;i++)
   {
       ok =malloc(sizeof(struct test));
   } 

}
void main ()
{
    int j=0;
    while(j<60)  
    {
      test_ok();
      j++;
      sleep(1);
    }

}

在您的代码中,永远不会调用test_ok() ,因此永远不会执行malloc() 这样就不会发生内存分配,也不会出现内存泄漏的问题。

无论如何,任何体面的编译器都会优化test_ok()代码。


编辑:

如果实际上是从main()调用test_ok() ,它将最终调用该函数,并通过调用malloc()分配内存[前提是malloc成功)并且不执行任何操作。 因此,从理论上讲,是的,那里会有内存泄漏。

注意事项:正如您提到的,

[...]函数返回后[...]

假设您在谈论test_ok()函数,不,仅从具有malloc-ed指针的函数返回不会导致内存泄漏。 当您在使用完成后错过释放内存时,就会发生泄漏(不再引用/使用)。

退出程序时,从main()返回,无论如何都将取消分配所有已分配的内存。 当程序继续运行时,将出现由于内存泄漏而引起的问题。

就是说,按照最新的标准, void main()对于托管环境不是有效的签名,至少应使用int main(void)

您的程序没有调用test_ok() ,所以答案是否定的。

如果test_ok() ,答案将是。 您正在使用malloc在堆上分配内存,然后不使用free清理malloc

编辑:现在,OP已被编辑为调用test_ok() ,所以是的,该程序将泄漏内存。

除非您实际上是从main()内部调用test_ok() ,否则不会这样。

在重新分配指针之前,应释放它。 否则,先前分配的内存不再由任何东西指向(而是仍分配),因此会泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM