c++,动态数组问题,地址越界了?应该如何解决.大一小问题,求大佬解答

我在构造函数中初始化是这样的

//学生基本信息 数量
    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日

今天我问过老师
说动态数组的长度是不变的
要用的话,需要重新定义一个新的.

在这里谢谢大家的帮助了

lenth没有定义吧?