c++ - 如果我在下面的代码片段中添加 `delete[] d;`,为什么我会得到零?
问题描述
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;
}
解决方案
当您使用它分配内存时new[]
,它将是未初始化的,内存的内容将是不确定的,并且以除了初始化之外的任何方式使用它都会导致未定义的行为。
我建议您不要使用必须记住在每次迭代结束时释放的动态分配内存,std::vector
而是使用 a 。
您可以使用特定数量的元素创建它,每个元素都初始化为特定值。例如
std::vector<int> d(10); // Create 10 default-initilized (zero) integers
当循环迭代时,向量超出范围并且其生命周期结束。并且当循环在下一次迭代中重新开始时,将创建一个新的新向量。
推荐阅读
- buefy - 如何检测 buefy b-dropdown 组件中的滚动?
- powershell - 用于用户创建/添加的 PowerShell CMDlet 替代方案
- kotlin - kotlin.UninitializedPropertyAccessException:lateinit 属性 ans 尚未初始化
- r - 如何使用 R purrr 组合数百个 Excel 文件/工作表
- puppeteer - Puppeteer 是否在页面上运行 JavaScript?
- codenameone - com.codename1.util.regex.RESyntaxException - 语法错误:类不匹配
- python - jinja2.exceptions.TemplateSyntaxError: 预期标记'打印语句结束',得到'='
- python - 如果冒号退出,df 列中的 Pandas 在冒号后提取字符串;如果没有,请保留文字
- ios - 如何在 SwiftUI 中使用 Core Text
- ssl - 在本地 ServiceFabric httpGatewayEndpointPort 上使用 SSL 证书