我有以下代码:
#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函数删除了数组,所以我应该得到错误或其他东西。
感谢任何帮助。
答案 0 :(得分:1)
访问已删除的内存部分会导致未定义的行为。这意味着一切都会发生。虽然内存已被释放,因此可以在那里写入其他东西,在这种情况下它不是,所以你仍然可以读取之前存在的值。
当然你甚至不应该尝试。删除后将指针设置为NULL是一种很好的做法。