【发布时间】:2018-02-05 10:54:17
【问题描述】:
这段代码的结尾我看不懂(array = 0;):
#include <iostream>
int main()
{
std::cout << "Enter a positive integer: ";
int length;
std::cin >> length;
int *array = new int[length];
std::cout << "I just allocated an array of integers of length " << length << '\n';
array[0] = 5; // set element 0 to value 5
delete[] array; // use array delete to deallocate array
array = 0; // use nullptr instead of 0 in C++11
return 0;
}
最后,一个动态分配的数组被删除(返回给OS),然后赋值为0。
为什么要这样做?数组返回给操作系统后,就不用赋值0了吧?
代码来自:http://www.learncpp.com/cpp-tutorial/6-9a-dynamically-allocating-arrays/
【问题讨论】:
-
它设置了一个有效的(但为空的)指向数组的指针,以避免出现悬空指针。所以以后,我们可以在使用之前测试
array。如果指针不再使用,它确实是不需要的。 -
int *array,作为一个指针,仍然保存它指向的地址信息,即使对象被释放。由于该空间不再属于该指针,请将其设置为 0,这样您就无法访问一些随机数据。
-
使用
std::vector可以避免那些手动内存管理。 -
变量只在编译时才知道。您正在删除 值
-
在这种特定情况下,这是多余的,但有些人喜欢在
delete之后这样做
标签: c++ arrays pointers memory-management dynamic-allocation