如果在以下代码段中添加`delete [] d;`,为什么会得到零?

时间:2018-09-24 06:16:29

标签: c++

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

如果我删除了i,那么答案是正确的(544320)。但是我想在#include <iostream> using namespace std; int main() { // your code goes here int sum=0; int init=10000000; int end=99999999; int *d=0; for (int i=init; i<=end; i++) { int j=i; d = new int[10]; while (j>0) { d[j%10]++; j/=10; } bool repeat = false; for (int k=0;k<=9;k++) { if (d[k]>=2) { repeat=true; } } if (!repeat) { if (i%3==0) sum++; } delete[] d; } cout << sum; return 0; } 的每个周期中重置数组。

import email

message = email.message_from_string(email_str)
to = message.get('From')
cc = message.get('X-cc')
bcc = message.get('X-bcc')

1 个答案:

答案 0 :(得分:6)

当您使用new[]分配内存时,该内存将被未初始化,该内存的内容将被 indeterminate 并以任何方式使用,除了对其进行初始化外将导致undefined behavior

建议您使用std::vector来代替在每次迭代结束时都必须记住释放的动态分配内存。

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

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

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