Вызвано необработанное исключение: нарушение доступа для записи. this->**arr** было 0xCDDDCDDE

#pragma once
#include <iostream>
#include <initializer_list>

template <typename T>

class super_array {

public:

    super_array(int length) {

        this->length = length;
        arr = new T[this->length];

    }

    void append_in_the_end(int elem);

    void append_in_the_beginning(int elem);

    void insert(int index, int elem);

    void remove_from_the_end(int elem);

    void remove_from_the_begining(int elem);

    void remove_by_index(int index, int elem);

    void remove_dublicate();

    void print();


    super_array(const std::initializer_list<T>& list) {

        int counter = 0;

        for (auto &elem : list) {

            arr[counter] = elem;
            ++counter;

        }

    }

    ~super_array() {

        delete[] arr;

    }

private:

    int length;
    T* arr;

};

Это заголовочный файл. Отладчик пишет, что ошибка в строке 42: "arr[counter] = elem;". В общем, подскажите, пожалуйста, в чем именно заключается ошибка. Заранее спасибо! Пысы: там сайт не видит две вещи. Первое - в 3 строке я подключаю иострим, а в 7 делаю класс шаблонным.


Ответы (1 шт):

Автор решения: Harry

А куда вы пишете? Память-то для arr не выделена...

А если вы считаете, что она выделена в другом конструкторе - ну так сначала его надо вызвать :):

super_array(const std::initializer_list<T>& list):super_array(list.size()) {
    int counter = 0;
    for (auto &elem : list) {
        arr[counter] = elem;
        ++counter;
    }
}
→ Ссылка