以下article解释了内存泄漏。我不知道为什么下面的代码导致内存泄漏。为什么这是一个内存泄漏?
int *data = new int;
*data = 15;
当我创建data
并指定15,那么像我明白15被复制到记忆data
所以我们还是有一个指向data
指针,我们可以delete
它。
我认为内存泄漏将是data = 0x00123
例如,对吧?这里我们已经失去了对内存的控制,而内存真的被浪费了。
有什么想法?
以下article解释了内存泄漏。我不知道为什么下面的代码导致内存泄漏。为什么这是一个内存泄漏?
int *data = new int;
*data = 15;
当我创建data
并指定15,那么像我明白15被复制到记忆data
所以我们还是有一个指向data
指针,我们可以delete
它。
我认为内存泄漏将是data = 0x00123
例如,对吧?这里我们已经失去了对内存的控制,而内存真的被浪费了。
有什么想法?
您正在有选择地阅读。从原来的网站
报价您链接:
超出范围的指针
void memLeak()
{
int *data = new int;
*data = 15;
}
在这个例子中有内存泄漏,因为没有人删除data
,它变得不可达的之后memLeak
此片段:
int *data = new int;
*data = 15;
是不是内存泄漏本身
你必须考虑到代码的完整的上下文:
void memLeak()
{
int *data = new int;
*data = 15;
}
在这种情况下,一旦函数返回时,你不再有权访问指针,因此将无法恢复分配给该指针的内存。
单独注意,data = 0x00123
比内存泄漏要糟糕得多。这是未定义的行为。
为什么,如果我没有访问该内存? – Narek
这是不正确的。你可以指定任何你想要的堆栈变量。 – Aenimated1
@Narek,因为这变成了一个无效的指针。标准对于无效指针非常严格。 – SergeyA
泄漏是如果'delete'从未在数据指向的指针上调用,则复制'15'不是问题。 –
你知道这篇文章告诉你为什么它在代码下面泄漏。此外,代码是不是内存泄漏,因为我们没有上下文。 – NathanOliver