C++删除数组只会解除分配第一项



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

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数组的第一项被删除。我做错了什么?如何完全删除此阵列?

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

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

最新更新