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

c++: array of pointer to objects -> program crash when elements are deleted

本文关键字:程序 元素 崩溃 gt 删除 对象 数组 指针 C++      更新时间:2023-10-16

我有一个指向" ss_daten"类的指针数组。类" SS_DATEN"类具有静态实例计数器" NumberSinstances",当调用类的约束并在调用destructor时降低时,它会上升。我以数字=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;

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

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