Давайте разберемся с вашей функцией push_back
:
Bankaccount* tmp = new Bankaccount[maxCapacity + 1];
for(int i = 0; i < maxCapacity; i++){
tmp[i] = entries[i];
}
Пока все хорошо.Вы создали новый массив с одним дополнительным пробелом.(бонус: читайте о том, почему это плохая идея )
delete entries;
Хорошо, вам не нужен старый массив, но, как уже было выделено в разделе комментариев, вы должен использовать delete[] entries;
, поскольку он был выделен с new[]
.
for(int i = 0; i < maxCapacity; i++){
entries[i] = tmp[i];
}
Вот где это становится диким.Вы просто удалили entries
, но теперь вы разыменовываете неверный указатель и записываете в память.То, что вы на самом деле хотели сделать, это заменить весь цикл на entries = tmp;
.Это просто отбрасывает старый указатель, который больше не действителен, и сохраняет новый, который является действительным.
delete tmp;
NOOOOO!Мало того, что вы использовали delete[]
, но вы не хотите этого делать.Это только что уничтожило последнюю оставшуюся копию вашего массива.Теперь, где ваши данные?Удалите эту строку.
entries[maxCapacity] = a;
Да, это вроде работает, но вы забыли одну вещь: maxCapacity
должно быть увеличено при изменении размера массива (или, по крайней мере, где-то ).Эта строка технически исправна, но семантически неверна.У вас есть другая переменная usedCapacity
, которая говорит вам, где хранить данные.Теоретически, вы должны увеличивать maxCapacity
на некоторый коэффициент каждый раз, когда вы изменяете размер, что означает, что он обычно не указывает на следующий свободный слот.Поэтому вы должны сделать это вместо этого:
// Better approach...
entries[usedCapacity] = a;
++usedCapacity;
++maxCapacity; // <- this line should actually go earlier when you resize
Надеюсь, это поможет вам начать.Есть и другие ошибки.Например, вы используете неправильный new
в конструкторе BankVector.На самом деле, вы не должны выделять на всех.Емкость начинается с нуля, поэтому просто установите указатель в NULL.
В случае сомнений выполните код с помощью отладчика.