我试图在C ++中使用大小变化的数组。由于某种原因,大小不会改变,它只持有1个字符串。困难的部分是用户无法输入他们要添加的课程数量,而是在用户停止之前调用addCourse
函数。无法使用向量(这适用于学校作业,需要调整大小数组)。我坚持为什么数组似乎只有一个字符串,我认为它保持相当于numCourses
字符串。在每次调用函数后,我如何调整大小以保存多个字符串?
void Student::addCourse(string* courseName)
{
int x;
numCourses += 1;//increments number of courses
string newCourse = *courseName;
string* newCourses = new string[numCourses];//temporary array
for(x=0; x<numCourses - 1; x++)//fills temp array with the values of the old
{
newCourses[x] = courses[x];
}
newCourses[numCourses - 1] = newCourse;//adds extra value
delete[] courses;//removes original array
courses = newCourses;//sets the new course list
}
编辑:对于那些询问无法使用向量的人,因为赋值的目的是使用堆主动避免内存泄漏。使用这样的数组会强制有意删除存储的值。
答案 0 :(得分:1)
注释应该已经回答了你的问题:调试器无法知道指向字符串的指针指向数组,也不知道它的边界,因为在运行时没有保留这样的信息(std相反,:: vector将在调试器中显示其全部内容。
答案 1 :(得分:0)
您的方法原型应为:
void Student::addCourse(const string& courseName);
如果您不想发生内存泄漏,请声明指向您班级课程的指针:
private:
string* courses;
在构造函数中为一个字符串数组分配空间:
Student::Student()
{
courses = new String[5];
}
然后在析构函数中释放: 学生::〜学生() { 删除[]课程; }
这为您提供最多5个课程的空间。如果需要更多,则需要在运行时调整字符串数组的大小:
void Student::ExtendArray()
{
delete[] courses;
courses = new String[10];
}
请注意,此代码不是异常安全的,但会为您提供基本的想法。