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]是指针数组,我需要删除所选元素
答案 0 :(得分:0)
如果您能找到学生名,似乎要删除每个学生实例。
students
似乎是指向指针的二维结构指针。即; **students
。但是,您要以错误的方式删除它。首先需要删除students[i]
的实例,然后删除学生实例。
此外,由于您在删除实例后调用析构函数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;
答案 1 :(得分:0)
首先排队,如果你真的需要删除&#34;学生&#34;宾语。如果是,您可以添加一些不良代码,如:
students[i] = nullptr;
如果您的学生不仅存储在此阵列中,您可以让该存储负责删除。但是由于之后使用空指针,这两种方式都不是很好。了解如何使用集合,例如vector。您只需从数组中删除指针即可。