gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:49:57 27 4
gpt4 key购买 nike

因此,我给出了一些如何使用动态分配的二维数组的示例,并且即将发送基本上如下的代码:

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。我们刚刚删除了它的“内容”。

删除后又是一个未赋值的指针。

关于c++ - 为什么在 C++ 中删除动态分配的数组后不能重用它的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35079109/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com