为什么这是内存泄漏?

时间:2016-04-12 13:45:06

标签: c++ memory-leaks

以下article解释了内存泄漏。我想知道为什么以下代码会导致内存泄漏。

<folder>

当我创建<?xml version="1.0" encoding="UTF-8"?> <ROOT> <PQContact> <input> <folder> <UNITCD>CS2XAA</UNITCD> <FOLDERID>KKMTEST3000</FOLDERID> <case> <RMEM>KKMTEST3000</RMEM> <transaction>ABC</transaction> </case> </folder> </input> <input> <folder> <UNITCD>CS2XAA</UNITCD> <FOLDERID>KKMTEST1300</FOLDERID> <case> <RMEM>KKMTEST1300</RMEM> <transaction>DEF</transaction> </case> </folder> </input> </PQContact> <AWD /> </ROOT> 并分配15时,然后根据我的理解,15被复制到内存 int *data = new int; *data = 15; 所以我们仍然有一个指向data的指针,我们可以data它。

我认为内存泄漏可能是data,对吧?在这里,我们已经失去了对内存的控制,内存真的被浪费了。

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

你正在有选择地阅读。

引用您链接的原始网站:

  

超出范围指针

void memLeak( )
{
  int *data = new int;
  *data = 15;
}

在此示例中存在内存泄漏,因为没有人删除data并且在memLeak之后无法访问

这个片段:

int *data = new int;
*data = 15;

本身不是内存泄漏

答案 1 :(得分:3)

您必须考虑该代码的完整上下文:

void memLeak( )
{
    int *data = new int;
    *data = 15;
}

在该上下文中,一旦函数返回,您就不再能够访问指针,因此无法恢复分配给该指针的内存。

答案 2 :(得分:-1)

另外,data = 0x00123比内存泄漏更糟糕。它是未定义的行为