c ++:指向对象的指针数组 - >删除元素时程序崩溃

时间:2017-09-13 12:37:45

标签: c++ arrays pointers object

我有一个指向数组的指针数组" SS_Daten"。课程" SS_Daten"有一个静态实例计数器" NumberInstances"当调用类的构造器时调高,调用析构函数时调低。我用Number = 20运行测试。

SS_Daten* SSDaten = new SS_Daten[Number];
SS_Daten* ptrSSDaten[Number];

for (int i = 0; i < Number; i++)  {
   ptrSSDaten[i] = &SSDaten[i];
}

我可以毫无问题地删除所有数组元素。计数器像预期的那样从20变为0。

cout << endl << "Number of Instances before: " << SS_Daten::NumberInstances << endl;
delete [] *ptrSSDaten;
cout << endl << "Number of Instances after: " << SS_Daten::NumberInstances << endl;

当我逐个删除一些(如5或6)数组元素时,它没有问题,但是当我删除所有元素时,程序崩溃了。如果我在10到15之间删除它有时会工作,并且有些时候会崩溃。

cout << endl << "Number of Instances before: " << SS_Daten::NumberInstances << endl;
delete ptrSSDaten[0];
delete ptrSSDaten[1];
delete ptrSSDaten[2];
delete ptrSSDaten[3];
delete ptrSSDaten[4];
delete ptrSSDaten[5];
.....
delete ptrSSDaten[19];
cout << endl << "Number of Instances after: " << SS_Daten::NumberInstances << endl;

指向对象的指针数组会传递给有时删除元素并更改数组中元素位置的函数。 我需要的东西是一种太干净的方式,在这个主实例的末尾的其他元素。但那会导致程序崩溃。

cout << endl << "Number of Instances before: " << SS_Daten::NumberInstances << endl;
int AA = SS_Daten::NumberInstances;
for (int i = 0; i < AA; i++)    {
    delete ptrSSDaten[i];
}
cout << endl << "Number of Instances after: " << SS_Daten::NumberInstances << endl;

1 个答案:

答案 0 :(得分:1)

您有未定义的行为。您使用new[]来分配数组。要摆脱阵列,您必须使用delete []。您无法在单个元素上调用delete,因为它们从未使用new分配。

我建议您改用std::vector。如果您需要删除矢量元素,可以erase它。