Вызвано необработанное исключение: нарушение доступа для записи. 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;
}
}