gpt4 book ai didi

c++ - 删除动态数组?

转载 作者:行者123 更新时间:2023-11-30 04:11:45 25 4
gpt4 key购买 nike

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

首次出现:

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;
}
}

courses 是在我的 header 中定义的指针。如果我注释掉 delete 行,代码就可以正常工作,否则程序会崩溃。

另一个出现:

StudentReviewSystem::StudentReviewSystem()
{
numberOfCourses = 0;
courses = new Course[0];
}

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

我知道我必须删除我的动态数组以避免内存泄漏,但每当我的析构函数被调用时,程序就会崩溃,所以我也注释掉了那一行。

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


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

最佳答案

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

要么实现或删除复制功能,要么(更好)不要自己管理资源:使用 std::vector<Course>为您完成工作。如果你这样做,你也不需要析构函数,并且 addCourse会简单得多。

关于c++ - 删除动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20101172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com