为什么在 C++ 中删除动态分配的数组后不能重用它的名称?
Why can't I reuse the name of a dynamically-allocated array after I delete it in C++?
因此,我给出了一些如何使用动态分配的 2D 数组的示例,并准备发送本质上如下的代码:
int size = 5;
int* arr = new int[ size ];
for( int i = 0; i < size; i++ )
arr[ i ] = i;
delete[] arr;
size = 10;
int* arr = new int[ size ];
for( int i = size; i > 0; i-- )
arr[ i ] = i;
delete[] arr;
这给了我一个重新定义错误,但我认为 delete[] 释放了内存中的空间(因此是"arr")。我知道如何解决这个问题(新的数组名称,不要删除[]/重新定义),但我想知道到底发生了什么导致错误?
你可能想试试这个:
int size = 5;
int* arr = new int[ size ];
for( int i = 0; i < size; i++ )
arr[ i ] = i;
delete[] arr;
size = 10;
arr = new int[ size ]; //<-- no int* here, we just need to reassign
for( int i = size; i > 0; i-- )
arr[ i ] = i;
delete[] arr;
我们确实在解除分配 arr 指向的内存块,但这并不意味着我们要删除 int* arr。我们刚刚删除了它的"内容"。
在我们删除它之后,它只是一个未分配的指针。
arr
声明两次。您可以重用它,但无需再次声明它。
size = 10;
int* arr = new int[ size ];
相关文章:
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何对不在数组中的变量进行排序?
- 从用户那里获得无限量的输入,而不是打印最大的3个,而不使用数组
- (C++)我的函数不返回数组
- 用c++排序,不带数组
- Sizeof返回的是指针大小,而不是数组大小.有其他方法可以找到尺寸吗
- 在 c++ 中比较不相等数组或字符串的方法
- 为什么会出现一些垃圾而不是数组值?
- 是否可以在不使用数组的情况下将不同数量的相同类型的参数传递给函数?
- 使用指针交换而不引用数组C++
- 使用 auto 时不检查数组边界
- 我想返回数组索引,而不是数组值
- 我不明白数组名称是如何指向数组的指针
- 如何将值分配给递增变量(如数组),但不使用数组
- 我试图释放数据的某些部分,并用特定的整数值标记其休息,以表明它不是有效的指针.(不是数组)
- 当循环崩溃时,不向数组添加单词
- C++用户定义的不使用数组的序列整数
- C++如果我不知道数组大小并且需要接收数组怎么办
- Subscripted Value不是数组