![](/img/trans.png)
[英]run time error in dynamically allocated array to delete an element in c++
[英]Delete dynamically allocated array c++
bool StudentList::remove(const char * studentName)
{
for (int i = 0; i < MAX_SIZE; i++)
{
if (this->students[i]->isEqualTo(studentName)) // Finds a name to remove
{
cout << "Remove: "; // Displays name wished to be removed
students[i]->print();
// delete[] students[i]; - Crashes
// students[i] = NULL; - Replaces removed name with null, stops working.
// students[i]->~Student(); - Call deconstructor, Crashes.
return true;
}
}
return false;
}
我只想从数组中删除单个元素,但是在删除该元素时一直崩溃。
students [i]是一个指针数组,我需要删除选定的元素
如果可以找到学生姓名,则似乎要删除每个学生实例。
students
似乎是一个指向指针的二维结构指针。 即; **students
。 但是,您删除它的方式有误。因为首先需要删除students[i]
的实例,然后再删除students的实例。
另外,由于您正在调用析构函数的students[i]->~Student();
删除实例后,由于您分配了student[i] = NULL
,它可能再次崩溃。 那么它将是NULL->~Student()
-它也将导致崩溃。
您需要通过以下方式将其删除:
for (int i = 0; i < MAX_SIZE; i++)
{
if (this->students[i]->isEqualTo(studentName)) // Finds a name to remove
{
students[i]->~Student();
delete students[i];
students[i] = NULL;
}
}
delete[] students;
students = NULL;
首先,如果您确实需要删除“学生”对象。 如果是,则可以添加一些错误代码,例如:
students[i] = nullptr;
如果您的学生不仅存储在此阵列中,还可以使该存储负责删除它们。 但是这两种方法都不是很好,因为以后会使用空指针。 了解如何使用集合,例如vector 。 您将只需要从数组中删除指针即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.