【发布时间】:2013-11-20 16:17:57
【问题描述】:
我在删除项目中的动态数组时遇到问题。
首次出现:
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 是在我的标题中定义的指针。
如果我注释掉 delete 行,代码就可以正常工作,否则程序会崩溃。
又出现了:
StudentReviewSystem::StudentReviewSystem()
{
numberOfCourses = 0;
courses = new Course[0];
}
StudentReviewSystem::~StudentReviewSystem()
{
//delete[] courses;
}
我知道我必须 delete 我的动态数组以避免内存泄漏,但是每当我的析构函数被调用时,程序就会崩溃,所以我也注释掉了该行。
每当我尝试删除动态数组时,无论我做什么,程序都会崩溃。
事实证明,你不能delete[] 一个大小为 0 的数组。所以,我每次想要 delete 一个数组时都会检查大小。但是 0 大小的数组会导致内存泄漏吗?
【问题讨论】:
-
你在关注the rule of three吗?
-
Aside:除非您需要在此处使用
new和delete,否则不要。std::vector显然优于这种方法。 -
courses = new Course[0];??为什么是 0,你想对大小为 0 的数组做什么? -
用户将向系统添加课程并且这个数字会增长。最初是 0。
标签: c++ arrays pointers memory-management