在c++中删除动态数组

Deleting dynamic array in C++

本文关键字:动态 数组 删除 c++      更新时间:2023-10-16

我有以下代码:

#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函数删除了数组,我应该得到和错误之类的东西。

任何帮助都是感激的。

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

当然,你甚至不应该尝试。这是一个很好的做法,设置指针为NULL后,它被删除。