如果我添加delete[] d;以下代码片段,为什么我会为零?以下是我在ideone.com上运行的链接:https://ideone.com/WxbaJt
如果我删除了delete[] d;那么答案是正确的(544320).但我想在每个循环中重置数组i.
#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;
}
Run Code Online (Sandbox Code Playgroud)
当你分配内存时new[],它将是未初始化的,内存的内容将是不确定的,并以任何方式使用它,除了初始化它将导致未定义的行为.
我建议您使用std::vector而不是使用在每次迭代结束时必须记住释放的动态分配的内存.
您可以使用特定数量的元素创建它,每个元素都初始化为特定值.例如
std::vector<int> d(10); // Create 10 default-initilized (zero) integers
Run Code Online (Sandbox Code Playgroud)
当循环迭代时,向量超出范围并且其生命周期结束.当循环在下一次迭代中重新开始时,将创建一个新的新矢量.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |