代码之家  ›  专栏  ›  技术社区  ›  NeoZoom.lua

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

c++
  •  -3
  • NeoZoom.lua  · 技术社区  · 7 年前

    为什么我加起来就等于零 delete[] d; 在下面的代码段中?以下是我在ideone.com上运行的链接: https://ideone.com/WxbaJt

    如果我移除 那么答案是正确的(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;
    }
    
    1 回复  |  直到 7 年前
        1
  •  6
  •   Some programmer dude    7 年前

    当你分配内存时 new[] 会的 ,内存的内容将 undefined behavior .

    我建议您使用 std::vector 相反。

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

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