C++ 中的 delete[] 运算符无法正常工作

0 c++ dynamic-memory-allocation delete-operator

请看看下面的代码::

    #include<iostream>
    using namespace std;
    
    int main()
    {
         int *ptr;
    
        ptr = new int[100000];
    
        cout<<"\n\n address = "<<ptr;

        for(long int i=0;i<100000;i++)
            *(ptr+i) = i+1;
    
        delete []ptr;
        cout<<"\n\n address = "<<ptr;

        ptr = new int[5];
        cout<<"\n\n address = "<<ptr;
        
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出是:

address = 0xd42490

 address = 0xd42490

 address = 0xe919d0
Run Code Online (Sandbox Code Playgroud)

为什么,在delete []ptr;它仍然指向它之前的位置之后(见第二个输出)。

Jes*_*uhl 5

delete[]正在正常工作。它确保为数组成员调用析构函数并将内存(内部)标记为可重用。

没有在C ++标准,指出它具有零的内存或存储返回OS或清除变量抱着你传递给它的地址等。

一旦你delete做了某事,你就知道析构函数已经运行,你也知道你不再被允许查看(访问)该内存。如果你这样做,就不能保证你会得到什么(除了UB)。

指针就像一个纸板标志,上面写着“那边有东西”。当您delete在指针上使用时,它会破坏“那边”的内容,但它不会重写符号本身(指针),因此指针仍然指向它一直指向的相同内存位置,但访问该内存位置是现在禁止。