C ++删除数组只释放第一个项目

时间:2018-05-05 23:03:55

标签: c++ memory

我想从内存中删除一个数组,就好像它从未存在过一样。这是我正在运行的一些代码的简化。出于某种原因,删除数组只会删除第一项。

struct PrimeFactor {
    int prime;
    int degree;
};

totalPrimes = 3;

PrimeFactor* primeFactors = new PrimeFactor[totalPrimes];

primeFactors[0].prime = 2;
primeFactors[1].prime = 3;
primeFactors[2].prime = 5;

primeFactors[0].degree = 1;
primeFactors[1].degree = 2;
primeFactors[2].degree = 1;

for (int c = 0;c < totalPrimes; c++)
    cout << c << " , " << primeFactors[c].prime << " , " << primeFactors[c].degree << "\n";

// Prints
// 0 , 2 , 1
// 1 , 3 , 2
// 2 , 5 , 1

delete [] primeFactors;

for (int c = 0;c < totalPrimes; c++)
    cout << c << " , " << primeFactors[c].prime << " , " << primeFactors[c].degree << "\n";

// Prints
// 0 , 0 , 0
// 1 , 3 , 2
// 2 , 5 , 1

您会看到只删除了primeFactors数组的第一项。我究竟做错了什么?如何完全删除此数组?

1 个答案:

答案 0 :(得分:0)

你有一个悬空指针。在对象销毁期间出现悬空指针,当删除或取消分配具有传入引用的对象时,不修改指针的值,以便指针仍指向解除分配的内存的内存位置。

delete [] primeFactors;
primeFactors = nullptr; // pointer is no longer dangling