在C ++中删除动态数组

时间:2015-09-08 19:06:11

标签: c++ arrays new-operator delete-operator

我有以下代码:

#include <iostream>
#include <string>

using namespace std;

int *arr;
void initiate(int n)
{
    cout<<"inside initiate"<<endl;
    arr = new int [10];
    for(int i=0;i<10;i++)
        arr[i] = i;
}
void end(int *arr)
{
    cout<<"inside end"<<endl;
    delete[] arr;
}
int main() {
    string str;
    cin>>str;
    while(str != "End")
    {
        if(str == "Insertion")
        {
            cout<<"inside if"<<endl;
            initiate(10);
        }
        cin>>str;
        if(str=="Selection")
        {
            cout<<"inside selection"<<endl;
            cout<<arr[9]<<endl;
        }
        cin>>str;
    }
    end(arr);
    cout<<arr[9];
    return 0;
}

我尝试通过一个函数动态地将存储分配给数组,并根据用户的输入通过其他函数删除它。 对于以下输入集:

  

插入   选择   端

我得到以下输出。 :

  

里面如果   内部发起   内部选择   9   内心尽头   9

我无法理解的是,在调用结束函数后,我的程序正在打印arr [9]值。根据我的理解,因为我在此之前通过调用end函数删除了数组,所以我应该得到错误或其他东西。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

访问已删除的内存部分会导致未定义的行为。这意味着一切都会发生。虽然内存已被释放,因此可以在那里写入其他东西,在这种情况下它不是,所以你仍然可以读取之前存在的值。

当然你甚至不应该尝试。删除后将指针设置为NULL是一种很好的做法。