繁体   English   中英

删除动态分配的数组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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM