Нарушение прав доступа при чтении C++
Посмотрел уже кучу тредов по поводу этой ошибки, но не могу понять, что не так у меня, ведь я, вроде делаю все необходимые проверки на наличие пустых указателей. В моей программе я создаю список. Соответственно, чтобы двигаться по элементам мои списка я использую привычную и стандартную конструкцию
Node *nx = head;
while(nx->next!=NULL){
nx = nx->next;
}
Однако, как только я пишу этот блок, то программа выдает ошибку во время исполнения, пишет, что обнаружено необработанное исключение и нарушение прав доступа. Однако, почему так происходит понять не могу - вроде все проверки на "NULL" у меня есть и обращения к пустому указателю не должно никак происходить.
#ifndef LIST_H
#define LIST_H
#include "Triangle.h"
struct Node {
Triangle tri;
Node* next;
Node* prev;
};
class List {
public:
Node* head;
List();
void AddElem();
//void DeleteElem(int i);
//void GetElem(int i);
//~List();
friend std::ostream& operator<<(std::ostream& out, List& d);
};
#endif
Вот ошибка происходит на строчке с while
List::List() {
head = NULL;
}
void List::AddElem() {
struct Node* elem = (Node*)(malloc(sizeof(struct Node)));
std::cin >> elem->tri;
if (head == NULL) {
head = elem;
}
/*else {
Node* nx = head;
//if (nx != NULL) {
while (nx->next != NULL && nx!= NULL) { // здесь тоже ругается
nx = nx->next;
}
nx->next = elem;
elem->prev = nx;
}
*/
}
std::ostream& operator<<(std::ostream& out, List& d) {
if (d.head != NULL) {
struct Node* nx = d.head;
while (nx != NULL && nx->next != NULL) { // ошибка здесь
out << nx->tri << "\n";
if (nx->next != NULL) {
nx = nx->next;
}
}
}
return out;
}
В чем проблема?
Ответы (2 шт):
Node *nx = head; while(nx->next!=NULL){ nx = nx->next; }
Подозреваю, что не хватает проверки, что сам указатель NULL:
Node *nx = head;
if (nx)
for(; nx->next; nx = nx->next)
;
Проблема найдена и решена - ошибка в том, что я не инициализировал указатели next и prev и они были не определены. необходимо добавить
elem->next = NULL;
nx ->next = head->next