【发布时间】:2013-02-18 07:50:14
【问题描述】:
我问这个问题是为了让自己摆脱对以下程序的困惑。我知道在某些上下文中使用数组会使数组衰减为指向其第一个元素的单个指针。我有一个通过指针返回这个数组的函数(这个函数是使用new[] 创建的)。数组会衰减,导致指针仅指向第一个元素吗?这是一个例子:
int *foo() {
int *t = new int[10];
return t;
}
int main() {
int *p = foo();
}
这就是混乱的地方。我不知道p 是指向第一个元素还是指向整个数组。所以我有以下问题:
- 通过指针返回数组是否会导致数组衰减(进而导致内存泄漏)?
-
p是否指向数组的第一个元素? - 如果以上两个为真,在
p上使用delete[]会导致未定义的行为吗?
我希望这些问题能够得到解答,以便我能够完全理解这个程序。谢谢。
【问题讨论】:
-
如果你的下一行是
p = ''或其他东西,你会“丢失”从 foo 返回的指针,并且繁荣......内存泄漏。如果您忽略清理分配的任何内存,这只是内存泄漏。其中一部分可能是“忘记”或“丢失”指向该内存的指针。 -
"decay" 对使用动态存储持续时间创建的对象根本不做任何事情。它只是描述了数组表达式发生的事情,将它们视为指针类型。
-
内存泄漏不是关于如何在应用程序中传递指针,而是关于如何确保(“管理”)所有已分配的内存也被释放。内存管理越简单,代码中出现内存泄漏的可能性就越小~> 所以请尽可能关注RAII :)
-
衰减只影响数组类型的变量。你没有这样的东西。
标签: c++