以下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
,对吧?在这里,我们已经失去了对内存的控制,内存真的被浪费了。
有什么想法吗?
答案 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
比内存泄漏更糟糕。它是未定义的行为。