繁体   English   中英

在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 ];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM