如果在以下代码段中添加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')
答案 0 :(得分:6)
当您使用new[]
分配内存时,该内存将被未初始化,该内存的内容将被 indeterminate 并以任何方式使用,除了对其进行初始化外将导致undefined behavior。
建议您使用std::vector
来代替在每次迭代结束时都必须记住释放的动态分配内存。
您可以使用特定数量的元素创建它,每个元素都初始化为特定值。例如
std::vector<int> d(10); // Create 10 default-initilized (zero) integers
当循环迭代时,向量超出范围,并且其生命周期结束。当循环在下一次迭代中重新开始时,将创建一个新的新鲜矢量。