C++ 删除动态数组?

C++ 删除动态数组?,c++,arrays,pointers,memory-management,C++,Arrays,Pointers,Memory Management,我在项目中删除动态数组时遇到问题 首次出现: void StudentReviewSystem::addCourse( const int courseId, const string courseName ) { int i = findCourse( courseId ); if ( i == -1 ) { int newNum = numberOfCourses + 1; Course *newCourses = new Cours

我在项目中删除动态数组时遇到问题

首次出现:

void StudentReviewSystem::addCourse( const int courseId, const string courseName )
{
    int i = findCourse( courseId );

    if ( i == -1 )
    {
        int newNum = numberOfCourses + 1;
        Course *newCourses = new Course[newNum];
        for ( int j = 0; j < numberOfCourses; j++ )
        {
            newCourses[j] = courses[j];
        }
        Course aCourse(courseId, courseName);
        newCourses[numberOfCourses] = aCourse;
        //delete[] courses;
        courses = newCourses;
        numberOfCourses = newNum;
        cout<< "Course "<< courseId <<" has been added."<< endl;
    }
    else
    {
        cout<< "Course "<< courseId <<" has already exist."<< endl;
    }
}
我知道我必须
删除
我的动态数组以避免内存泄漏,但每当调用析构函数时,程序就会崩溃,所以我也会注释掉这一行

每当我尝试删除动态数组时,无论我做什么,程序都会崩溃



事实证明,您不能
删除[]
大小为0的数组。因此,每当我想
删除一个数组时,我都会检查大小。但是大小为0的数组会导致内存泄漏吗?

如果您的类管理资源,那么您通常需要一个析构函数、复制构造函数和复制赋值运算符。我的猜测是,您没有这些,因此该类具有无效的复制语义:复制它只会复制指针,而不是动态数组,留下两个对象都希望删除同一数组


实现或删除复制函数,或者(更好的是)不要自己管理资源:使用
std::vector
为您完成这项工作。如果这样做,您也不需要析构函数,而且
addCourse
会简单得多。

要么将StudentReviewSystem类型的一个对象分配给同一类型的另一个对象,而不显式定义复制赋值操作符(或复制构造函数)或者编译器在分配零长度数组时出现错误。

您是否遵循了?旁白:除非您需要在此处使用
new
delete
,否则不要这样做<代码>标准::向量
明显优于此方法。
课程=新课程[0]??为什么是0,您希望如何处理大小为0的数组?用户将向系统中添加课程,并且该数字会增加。最初是0。
StudentReviewSystem::StudentReviewSystem()
{
    numberOfCourses = 0;
    courses = new Course[0];
}

StudentReviewSystem::~StudentReviewSystem()
{
    //delete[] courses;
}