Получение & quot; Ошибка сегментации: ядро ​​сбрасывается при попытке записать строку в сеттер

У меня есть динамический массив объектов, размер которого я изменил. После изменения размера я могу вызывать методы set для объектов int и double, но не для любого метода установки с строковыми объектами. Каждый раз, когда я пытаюсь вызвать установщик для нового индекса в массиве с измененным размером, я получаю дамп ядра.

Это основная часть кода, которая генерирует ошибку.

void resizeAccounts(int newSize, Account *accounts, int acctNum, std::string fName,     :string lName, std::string acctP, double balance)
{
Account* newArr = new Account[newSize];

for (int i=0; i<newSize-1; i++)
newArr[i]=accounts[i];

delete [] accounts;
accounts = newArr;
accounts[newSize].setAccountNum(acctNum);
accounts[newSize].setFirstName(fName);
accounts[newSize].setLastName(lName);
accounts[newSize].setAccountPassword(acctP);
accounts[newSize].setBalance(balance);

for(int i=0; i<newSize; i++)
std::cout << accounts[i].getAccountNum() << std::endl;

Сеттеры, которые я использую

void Account::setFirstName( std::string fName)
{ firstName = fName; }
void Account::setLastName( std::string lName )
{ lastName = lName; }
void Account::setAccountPassword( std::string acctPass)
{ accountPassword = acctPass; }
void Account::setAccountNum( int acctNum)
{ accountNum = acctNum; }
void Account::setBalance( double bal)
{ balance = bal; }`

Это домашнее задание, и мне запрещено использовать векторы или большую часть библиотеки STL.
Спасибо,

0

Решение

Индексы массива запускаются из 0 в N - 1 так вот:

accounts[newSize].setAccountNum(acctNum);
//^^^^^^^^^

обращается к одному за концом массива, вызывая неопределенное поведение. Действительные индексы для accounts следовательно является 0 в newSize - 1,

Как std::vector не разрешено, я не буду упоминать это. Совсем.

5

Другие решения

C ++ использует 0 основанные массивы. Это означает, что когда вы выделяете массив размера 10 первый элемент по индексу 0 и последний элемент находится в индексе 9, В этом случае вы выделяете массив размера newSize а затем доступ к newSize элемент. Это не часть вашего массива, так как последний элемент newSize - 1, Вот почему вы получаете сбой.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector