请问如何解决缓冲区溢出的问题

int newSize = this->EmpNum + addNum;
        Worker ** newSpace=new Worker* [newSize];
        if (this->EmpArray != NULL) {
            for (int i = 0; i < this->EmpNum; i++) {
                newSpace[i] = EmpArray[i];
            }
        }
        for (int i = 0; i < addNum; i++) {
            int id;
            string name;
            int dselect;

            cout << "Please enter number " << i + 1 << " staff's number : ";
            cin >> id;
            cout << "Please enter number " << i + 1 << " staff's name : ";
            cin >> name;
            cout << "Please enter number " << i + 1 << " staff's department select : "<<endl;
            cout << "1. employee" << endl;
            cout << "2. manager" << endl;
            cout << "3. boss" << endl;
            cin >> dselect;
            Worker* worker = NULL;

            switch (dselect) {
            case 1:
                worker = new Employee(id, name, 1);
                break;
            case 2:
                worker = new Manager(id, name, 2);
                break;
            case 3:
                worker = new Boss(id, name, 3);
                break;
            default:
                break;
            }
            newSpace[this->EmpNum+i] = worker;
        }
    
        delete[] EmpArray;
        this->EmpArray = newSpace;
        this->EmpNum = newSize;

        cout << "Add successfully!" << endl;

        this->Save();

img

img