C++:指向对象的指针数组 - 删除元素时程序崩溃>
c++: array of pointer to objects -> program crash when elements are deleted
我有一个指向" 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
。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 为什么使用数组元素查找最大数字的程序不起作用?
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 程序来检查两个数组的相似元素
- 如果第一个元素包含任何零,则我的程序以不希望的方式运行
- 需要帮助编写一个小程序来将循环乘以 n 个元素和 k 个多重性
- 我的程序只输出 1 的最高元素
- 如何从C++程序中检索 DOM 元素?
- C++测试程序中的非法系统调用(对角矩阵元素程序的总和)
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- C++程序在迭代到数组的最后一个元素时崩溃
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 如何创建一个带有链表的程序,该链表会破坏第 n 个元素
- 试图删除最后一个std ::向量元素时,程序会崩溃
- 当矢量有 6 个元素(C++、矢量、循环)时,程序打印异常数字
- 程序必须将奇数索引元素放在新的向量 C 中,将偶数索引元素放在另一个向量 T 中
- 将元素添加到列表会使程序崩溃..有时
- C++:指向对象的指针数组 - 删除元素时程序崩溃>
- c++中不同程序元素的大小
- 不同程序元素的位置