@rustam6548

Как исправить данную оишбку?

Мне нужно сделать односвязный список, данными которого являются что-то наподобие словарей, не суть. Вроде работает, но данные из последнего элемента списка оказываются пустыми. Помогите, пожалуйста!

struct List {
	List();

	struct Map {
		string get(int param);

		string arriv;
		string flightID;
		string inits;
		string depatDate;

		Map(string arriv, string flightID, string inits, string depatDate) {
			this->arriv = arriv;
			this->flightID = flightID;
			this->inits = inits;
			this->depatDate = depatDate;
		}	
	};

	void push_back(Map* data);

	Map* operator[](const int index);

	struct Node {
		Map* data;
		Node* next;

		Node(Map* data, Node* next = NULL) {
			this->data = data;
			this->next = next;
		}
	};
	int size;
	Node* head;
};

List::List() {
	size = 0;
	head = NULL;
}

void List::push_back(Map* data) {
	if (this->head == NULL) {
		this->head = new Node(data);
	}
	else {
		Node* current = this->head;
		while (current->next != NULL) {
			current = current->next;
		}
		current->next = new Node(data);
	}
	size++;
}

List::Map* List::operator[](const int index) {
	Node* current = this->head;
	int counter = 0;
	while (current->next != NULL) {
		if (counter == index) {
			
			return current->data;
		}
		counter++;
		current = current->next;
	}
}
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dima20155
you don't choose c++. It chooses you
Проблема в операторе []
А именно в условии
while (current->next != NULL)
Должно быть
while (current != NULL)

Также у вас данный оператор не возвращает ничего в случае, индекс больше, чем количество элементов в листе, а также не проверяет условие по типу:
index < size

Помимо этого у вас ещё много проблем в коде, но если вы начинающий, то что же, учитесь, все впереди. Попробуйти найти себе человека, который сможет скорректировать/отревьюить ваш код, потому в текущем виде он весьма плохо может работать, из-за сырых указателей, таких же сырых выделений памяти, отсутствия её освобождения, непонятно зачем наличие оператора [] у linked list (в стандартной библиотеки их нет не случайно и нужна веская причина чтобы пользоваться оператором [] в linked list )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы