Попытка выдвинуть значение, используя динамический массив в C ++

0

Я пытаюсь написать функцию, которая толкает элемент в конец моего динамически выделенного массива (не разрешается использовать векторы). Как только он перейдет в область, чтобы удвоить размер списка, если список был слишком мал, чтобы сохранить следующий номер, все идет в ад и начинает кормить меня случайными числами с компьютера. Может ли кто-нибудь понять, почему он не удваивается, как это ожидалось?

    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;
}
  • 0
    Как вы инициализируете и используете это?
  • 0
    Я не думаю, что массив считается списком, если это домашнее задание.
Показать ещё 1 комментарий
Теги:
arrays
dynamic
memory
push

2 ответа

4

Если это ваша первоначальная настройка:

int *contents_; // Junk
int size_ = 0;
int capacity_ = 1;

Тогда ваш код, скорее всего, выполняет нарушение доступа к памяти в первый раз:

if (size_ == capacity_)
{
     // Not entering here, contents_ remains junk
}
contents_[size_++] = item;
0

Как подразумевал Barak, указатель contents_ необходимо инициализировать. Если нет, c++ укажет на то, что вы, вероятно, не хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню