Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';t在C+中删除动态分配的数组后,我重新使用该数组的名称+;?_C++_Arrays_Dynamic Memory Allocation_Redefinition - Fatal编程技术网

C++ 为什么可以';t在C+中删除动态分配的数组后,我重新使用该数组的名称+;?

C++ 为什么可以';t在C+中删除动态分配的数组后,我重新使用该数组的名称+;?,c++,arrays,dynamic-memory-allocation,redefinition,C++,Arrays,Dynamic Memory Allocation,Redefinition,因此,我给出了一些如何使用动态分配的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; delet

因此,我给出了一些如何使用动态分配的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;
int size=5;
int*arr=新的int[size];
对于(int i=0;i0;i--)
arr[i]=i;
删除[]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;
int size=5;
int*arr=新的int[size];
对于(int i=0;i
我们确实在释放arr指向的内存块,但这并不意味着我们要删除int*arr。我们只是删除了它的“内容”


在我们删除它之后,它又只是一个未分配的指针。

将两次声明
arr
。您可以重用它,但无需再次声明

size = 10;
int* arr = new int[ size ];

它与动态分配的数组没有任何关系。与此相同:
intn=42;int n=42你知道声明或定义变量意味着什么吗?请注意,如果代码的最后五行在
{
.
}
块中,你可以重用变量名。@MrLister:如果你习惯了变量“刚刚出现”的语言,那么你可能已经学会了鹦鹉学舌的方式
int arr=new int[size];
是如何创建
大小
元素数组,而没有意识到变量定义、初始化和赋值之间的区别。其他人已经回答了为什么这不是任何语言中可能存在的正常范围界定问题。但我认为你的问题也揭示了C++的误解,以及为什么它完全不同于脚本语言,比如JavaScript。在脚本语言中,变量的符号在运行时存在,因此可以删除该符号。但用C++,符号实际上并不存在于程序中,它们只是一种注释,这样人类就可以读取源。因此,删除符号的想法是错误的。