Я пытаюсь написать функцию, которая толкает элемент в конец моего динамически выделенного массива (не разрешается использовать векторы). Как только он перейдет в область, чтобы удвоить размер списка, если список был слишком мал, чтобы сохранить следующий номер, все идет в ад и начинает кормить меня случайными числами с компьютера. Может ли кто-нибудь понять, почему он не удваивается, как это ожидалось?
int *contents_;
int *temp;
int size_ = 0;
int capacity_ = 1;
void pushBack(int item) /**appends the specified value to DynArray; if the contents array is full,
double the size of the contents array and then append the value **/
{
if (size_ == capacity_)
{
capacity_ = (2*capacity_);
temp = new int[capacity_];
for (int i = 0; i < size_; ++i)
{
temp[i] = contents_[i];
}
delete [] contents_;
contents_ = temp;
}
contents_[size_++] = item;
}
EDIT ** Я забыл упомянуть. Это функция из класса. Это находится в заголовке и в главном:
main()
{
DynArray myArray;
myArray.pushBack(2);
myArray.pushBack(3);
myArray.printArray();
return 0;
}
Если это ваша первоначальная настройка:
int *contents_; // Junk
int size_ = 0;
int capacity_ = 1;
Тогда ваш код, скорее всего, выполняет нарушение доступа к памяти в первый раз:
if (size_ == capacity_)
{
// Not entering here, contents_ remains junk
}
contents_[size_++] = item;
Как подразумевал Barak, указатель contents_ необходимо инициализировать. Если нет, c++ укажет на то, что вы, вероятно, не хотите.