为什么在 C++ 中删除动态分配的数组后不能重用它的名称?

Why can't I reuse the name of a dynamically-allocated array after I delete it in C++?

本文关键字:不能 数组 C++ 删除 为什么 动态分配      更新时间:2023-10-16

因此,我给出了一些如何使用动态分配的 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 ];