C++ 删除C+中的动态数组+;

C++ 删除C+中的动态数组+;,c++,arrays,new-operator,delete-operator,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 *

我有以下代码:

#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;
}
#包括
#包括
使用名称空间std;
int*arr;
无效启动(int n)
{

cout访问内存中已删除的部分会导致未定义的行为。这意味着任何事情都有可能发生。虽然内存已解除分配,因此可以在其中写入其他内容,但在本例中不是,因此您仍然可以读取以前存在的值


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

那么,这是否意味着我动态分配和删除数组并在不同块中使用它的代码和逻辑是正确的?我只是打印了“arr[9]'值来检查数组是否被删除。当它打印值时,我感到困惑。它看起来是正确的。尝试分配一些内存,然后调用
coutgives 9作为输出。是的,未定义的行为是未定义的。任何情况都可能发生。不过,您可以参考Bo Persson提供的链接来查看它是否正确。另外,不要错过hilari我们回答Hi,谢谢你的链接。我感到困惑的是,因为我的arr指针是一个全局变量,我用它指向一个数组,我分配内存进行动态初始化。在结束函数中,当我删除数组(在初始化函数中分配)时,指向该数组的指针不是也被删除了吗?还是只删除了数组空间(包含10个)变量将被删除?指针变量仍然存在,并且可能包含与以前相同的位。但是,它指向的位置不必再存在,并且不允许您尝试访问它。我使用的机器上的最后一个
arr[9]
本可以终止该程序。是的。明白了。谢谢