我有关于删除我的项目中的动态数组的问题。删除动态数组?
首先出现:
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大小的数组会导致内存泄漏?
您是否遵循[三规则](http://en.wikipedia.org/wiki/Rule_of_three_%28C++_programming%29)? – juanchopanza
*旁白*:除非你被要求在这里使用'new'和'delete',**不要**。 'std :: vector'明显优于这种方法。 –
'courses = new Course [0];'??为什么0,你想用一个大小为0的数组做什么? – Johan