在c++中删除动态数组
Deleting dynamic array in C++
我有以下代码:
#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后,它被删除。
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错