Я пытаюсь сделать связанный список значений int. Я добавляю 3 значения int для отображения, и я их печатаю, но моя проблема после печати 3 значения, программа возвращается к функции печати для печати 4-го числа, потому что (tempNode! = NULL) дает значение true, но после печати должно быть NULL после печати 3, поэтому он дает мне ошибку чтения нарушения доступа в методе печати по адресу cout << "index " << size-- << ", value: "<< tempNode->num << endl;
Нарушение прав доступа Чтение Местоположение: Связанный список C++
Это выходит за пределы моих узлов списка, но я понятия не имею, где я делаю неправильно.
Пожалуйста, помогите, 2 дня, пытаясь понять это.
код ниже.
IntList::IntList()
{
first = NULL;
last = NULL;
size = 0;
}
IntList::Node::Node(const int& info, Node* next = NULL)
{
num = info;
next = next;
}
IntList::~IntList()
{
Node* tempNode = first;
while (tempNode != NULL)
//for(int i = 0; i < size; i++)
{
Node* nextNode = tempNode->next;
delete tempNode;
tempNode = nextNode;
}
first = last = NULL;
size = 0;
}
IntList::IntList(const IntList& wl)
{
cout << "here word list copy conts " << endl;
first = last = NULL;
size = wl.size;
if(wl.first != NULL){
Node* tempNode = wl.first;
for(int i = 0; i < wl.size; i++)
{
addLast(tempNode->num);
tempNode = tempNode->next;
}
}
}
IntList& IntList::operator = (const IntList& wl)
{
cout << "here word list =" << endl;
if(this == &wl)
return *this;
Node* tempNode = first;
while (tempNode != NULL)
{
Node* nextNode = tempNode->next;
delete tempNode;
tempNode = nextNode;
}
first = NULL;
last = NULL;
if(wl.first != NULL)
{
for(int i = 0; i < wl.size; i++)
{
addLast(tempNode->num);
tempNode = tempNode->next;
size++;
}
}
return *this;
}
void IntList::addFirst(int& winfo)
{
Node* firstNode = new Node(winfo);
//Node firstNode(winfo);
if(first == NULL)
{
first = last = firstNode;
}
else
{
firstNode->next = first;
first = firstNode;
}
//increment list size
size++;
}
void IntList::print(ostream& out)
{
Node* tempNode = first;
while (tempNode != NULL)
{
out << "\t";
cout << "index " << size-- << ", value: "<< tempNode->num << endl;
tempNode = tempNode->next;
}
}
Не могли бы вы уменьшить это до минимального *, но полного примера, демонстрирующего проблему, с которой вы сталкиваетесь? Предпочтительно, что мы можем скомпилировать и запустить, не изменяя его. –
Где находится "addLast"? – Joe
Я могу предоставить файл заголовка, это нормально? – newbieLinuxCpp