指针 - 删除

时间:2015-05-20 06:54:56

标签: c++ arrays pointers

我2周前开始自己学习C ++,现在我正在研究指针。为什么下面的代码没有按照我期望的方式工作,删除后我在数组中看到相同的值。我认为数组将被删除,指针将指向堆中的一些随机整数,除非我写dArray = NULL。请问有人详细说明这一点,拜托?我不知道自己做错了什么。感谢。

PS:我在Mac上使用Xcode。

代码:

#include <iostream>
using namespace std;


int main() {

    int *dArray = new int[5];

    for(int i=0; i<5; i++) {
        dArray[i] = i*2;
    }

    cout << "Show array:" << endl;
    for(int i=0; i<5; i++) {
        cout << dArray[i] << endl;
    }

    delete [] dArray;

    // show array after deletion
    cout << "After deletion:" << endl;
    for(int i=0; i<5; i++) {
        cout << dArray[i] << endl;
    }

    return 0;
}

输出:

Show array:
0
2
4
6
8
After deletion:
0
2
4
6
8
Program ended with exit code: 0

3 个答案:

答案 0 :(得分:4)

delete不会更改指针的值。它只是意味着指针指向的东西不再合法访问(给出未定义的行为)。

在很多情况下(比如你的),程序看起来可能有效,但改变了一些东西(比如添加另一个new),它会以奇怪的方式失败并且难以追踪......设置指针删除后至少0会使故障更容易识别。

答案 1 :(得分:1)

删除数组只会将内存返回给运行时,但不会覆盖它。您可能不再使用它,这样做会调用未定义的行为。

答案 2 :(得分:1)

名称“delete”可能有点误导。它实际上并没有删除任何东西 - 只需释放先前分配的内存并调用它指向的对象的析构函数(如果存在的话)。调用析构函数是deletefree之间的主要区别。