C++ 为什么我加上`delete[]d;`在下面的代码段中?

C++ 为什么我加上`delete[]d;`在下面的代码段中?,c++,C++,如果我加上delete[]d,为什么得到零;在下面的代码段中?以下是我在ideone.com上运行的链接: 如果我删除删除[]d;那么答案是正确的544320。但是我想在I的每个周期中重置数组 当您使用new[]分配内存时,它将被取消初始化,内存的内容将是不确定的,以任何方式使用它(初始化除外)都会导致错误 我建议您使用动态分配的内存,而不是在每次迭代结束时必须记住释放的内存 您可以使用特定数量的元素创建它,每个元素都初始化为特定值。比如说 std::vector<int> d(10

如果我加上delete[]d,为什么得到零;在下面的代码段中?以下是我在ideone.com上运行的链接:

如果我删除删除[]d;那么答案是正确的544320。但是我想在I的每个周期中重置数组


当您使用new[]分配内存时,它将被取消初始化,内存的内容将是不确定的,以任何方式使用它(初始化除外)都会导致错误

我建议您使用动态分配的内存,而不是在每次迭代结束时必须记住释放的内存

您可以使用特定数量的元素创建它,每个元素都初始化为特定值。比如说

std::vector<int> d(10);  // Create 10 default-initilized (zero) integers

循环迭代时,向量超出范围,其生命周期结束。当循环在下一次迭代中重新开始时,将创建一个新的向量。

您的输出是不可预测的,因为d数组的元素没有初始化,请调用d=new int[10];将所有项初始化为0.5:因为不断地分配和释放相同数量的内存,所以很有可能将相同的内存分配给d。这有一个副作用,即数组的内容在分配后与释放前是相同的;目前,它会将此循环评估为未执行任何操作。如果不删除,它就无法优化出内存泄漏。UB被允许引起这样的优化;或int d[10]={0};。数组的大小始终为10。
std::vector<int> d(10);  // Create 10 default-initilized (zero) integers