我在构造函数中初始化是这样的
//学生基本信息 数量
int m = 0;
//得到学生基本信息条数
read_record(m);
//读取记录后数组长度增长
lenth += m;
//学生数组,存储信息
arr = new Student[lenth];
//从student.txt读入数据到数组中
read_to_stu(arr, m);
后面再调用
void Manager::Add()
{
int i, count;//定义循环变量i,动态数组元素数目count
Student* p;//指针p(动态数组)
cout << "请输入需要添加学生的人数" << endl;
cin >> count;//输入数组元素数目
p = new Student[count];//定义动态数组
for ( i = 0; i < count; i++)
{
//学号
string id;
//姓名
string Name;
//性别
string Sex;
//年龄
string Age;
//省份
string Province;
//专业
string Major;
if (count != 0)
{
cout << "请输入第" << i << "个人学号:\n";
cin >> id;
while (examID(id) == false)
{
cout << "输入有误!!!\n格式(12位数字)\n请重新输入学号" << endl;
cin >> id;
}
cout << "请输入第" << i << "个人名字:\n";
cin >> Name;
cout << "请输入第" << i << "个人性别:\n";
cin >> Sex;
while (examSex(Sex) == false)
{
cout << "输入有误!!!\n格式(男|女)\n请重新输入性别" << endl;
cin >> Sex;
};
cout << "请输入第" << i << "个人年龄:\n";
cin >> Age;
while (examAge(Age) == false)
{
cout << "输入有误!!!\n请重新输入年龄" << endl;
cin >> Age;
};
cout << "请输入第" << i << "个人省份:\n";
cin >> Province;
cout << "请输入第" << i << "个人专业:\n";
cin >> Major;
p[i].setID(id);
p[i].setName(Name);
p[i].setSex(Sex);
p[i].setAge(Age);
p[i].setProvince(Province);
p[i].setMajor(Major);
}
else cout<<"添加0人"<<endl;
}
lenth += count;//数组长度加需要添加人数
for (int j = lenth-count,i=0; j < lenth; i++,j++)
{
arr[j].setID(p[i].getID()) ;
arr[j].setName(p[i].getName()) ;
arr[j].setSex(p[i].getSex()) ;
arr[j].setAge(p[i].getAge()) ;
arr[j].setProvince(p[i].getProvince()) ;
arr[j].setMajor(p[i].getMajor()) ;
}
delete[]p; //释放数组空间
}
在后面的for循环中arr[]出现的错误地址错误
lenth += count;//数组长度加需要添加人数
我这句话有用吗,数组长度长了吗.然后
是越界了吗
应该如何解决
7月1日22:00更
int x = lenth;//辅助变量
lenth += count;//数组长度加需要添加人数
Student* temp = arr;//临时变量
//学生数组,存储信息
arr = new Student[lenth];
for (int i = 0; i < x; i++)
{
arr[i] = temp[i];
}
我在第二个for循环中加入上述语句暂时解决的需求,
但是这是不是说明
int k = 1;
int *a = new int[k];
k++;
执行完之后数组a的长度会变成2
上述的说法是错的呢?
求大佬给萌新讲解动态数组的长度是不是可以随意变化的
7月2日
今天我问过老师
说动态数组的长度是不变的
要用的话,需要重新定义一个新的.
在这里谢谢大家的帮助了