我问这个问题是为了让自己摆脱对以下程序的困惑。我知道在某些上下文中使用数组会使数组衰减为指向其第一个元素的单个指针。我有一个通过指针返回这个数组的函数(这个函数是使用创建的new[]
)。数组会衰减,导致指针仅指向第一个元素吗?这是一个例子:
int *foo() {
int *t = new int[10];
return t;
}
int main() {
int *p = foo();
}
这就是混乱的地方。我不知道是p
指向第一个元素还是指向整个数组。所以我有以下问题:
- 通过指针返回数组是否会导致它的衰减(并因此导致内存泄漏)?
- 是否
p
指向数组的第一个元素? - 如果上述两个为真,使用
delete[]
on会导致未定义的行为吗?p
我希望可以回答这些问题,以便我可以完全理解这个程序。谢谢你。