Для задания мне нужно это построить. Я просто не могу понять, что я делаю неправильно. Когда я пытаюсь запустить этот код, я продолжаю видеть указатель, который мой связанный список хранит в его исходном местоположении, и указывает на мусор прямо посередине. Я не знаю, только ли Visual Studio просто ошеломляет меня, или если мне не хватает назначения указателя где-нибудь. Это основной класс я использую, чтобы запустить мой кодC++ Связанный список Ошибка памяти
#include "stdafx.h"
#include "Iterator.h"
#include "Node.h"
#include "List.h"
#include <iostream>
int main()
{
int input = 0;
List<double> salaryList;
std::cin >> input;
Node<double> tim(7.0, nullptr);
Node<double> sim(input, nullptr);
Node<double> jim(7.5, nullptr);
salaryList.Add_back(&jim);
salaryList.Add_back(&tim);
salaryList.Insert_front(&sim);
Iterator<double> checkSalaries=salaryList.begin();
//std::cout << "printing all elements in Iterator" << std::endl;
while (checkSalaries.Is_item()){
double x = (*checkSalaries).value;
std::cout << x << std::endl;
checkSalaries++;
}
system("PAUSE");
return 0;
}
Это код для LinkedList, я просто назвал его список:
#include "Iterator.h"
#include "Node.h"
template <class t>
class List
{
private:
Node<t>* start=nullptr;
Node<t>* end=nullptr;
int size = 0;
public:
List() {
start = nullptr;
end = nullptr;
}
~List() {
}
void Insert_front(Node<t> * input) {
if (start != nullptr)
{
input->setPoint(start);
start = input;
size++;
}
else {
start = input;
}
if (start->point != nullptr && end == nullptr) {
end = start->point;
size++;
}
}
void Add_back(Node<t> * input) {
if (end != nullptr) {
Node<t> temp = (*end);
temp.setPoint(input);
end = input;
}
else {
if (start != nullptr) {
start->point=input;
end = input;
}
else {
start = input;
}
size++;
}
}
Iterator<t> begin() const
{
Node<t> tempNode = *start;
Iterator<t> temp(&tempNode);
return temp;
}
void Remove_all()
{
List<Node<t>> temp;
start = temp.start;
end = temp.end;
size = 0;
}
int Size() const {
return size;
}
};
Это код узла:
template <class T>
class Node {
public:
T value;
Node<T> * point;
Node(T first, Node<T> * second)
{
value = first;
point = second;
}
Node()
{
value = NULL;
point = nullptr;
}
void setPoint(Node<T> * input) {
point = input;
}
};
Я собираюсь включить здесь два изображения: первое - это то, что похоже на то, что перед тем, как оно сойдет с ума, а следующее - это то, что происходит сразу после этого, кажется, происходит довольно случайным образом, но я обнаружил, что использование cout всегда вызывает его, поэтому я прокомментировал эту строку, хотя это не решило проблему. Bad State
Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). –
Глядя на «узел», не следует ли это управлять, будь то первый или следующий «список». – macroland
Вы уверены, что Node temp = (* end) в Add_Back? –
MegaStupidMonkeys