我提出这个问题是为了解决我对以下程序的困惑。我知道在某些情况下使用数组会导致它衰变为指向其第一个元素的单个指针。我有一个通过指针返回此数组的函数(此函数使用new[]
创建)。这个数组会衰变吗,导致指针只指向第一个元素?以下是一个例子:
int *foo() {
int *t = new int[10];
return t;
}
int main() {
int *p = foo();
}
这里出现了混淆。我不知道
p
是指向第一个元素还是整个数组。所以我有以下问题:
- 通过指针返回数组会导致它衰减(从而导致内存泄漏)吗?
p
是否指向数组的第一个元素?- 如果上述两个问题是正确的,那么在
p
上使用delete[]
是否会导致未定义行为?
p = ''
或者其他什么,你就会“丢失”从 foo 返回的指针,然后...内存泄漏。只有当你忽略清理分配的任何内存时,才会出现内存泄漏。其中一部分可能是“遗忘”或“丢失”指向该内存的指针。 - Marc B