[英]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.