![](/img/trans.png)
[英]runtime error: member access within null pointer of type 'ListNode' - Clone a linked list
[英]why do I get member access within null pointer error (linked list)
以下是錯誤消息和我的鏈表代碼。 你能解釋一下為什么我會收到這個錯誤嗎?
“第 80 行:字符 21:運行時錯誤:null 類型‘節點’(solution.cpp)指針內的成員訪問摘要:UndefinedBehaviorSanitizer:未定義行為 prog_joined.cpp:85:21”
struct Node{
int val;
Node* prev;
Node* next;
Node(): val(-1), prev(nullptr), next(nullptr){}
Node(int x): val(x), prev(nullptr), next(nullptr){}
};
class MyLinkedList {
private:
Node* head;
Node* tail;
size_t size;
public:
MyLinkedList() {
head = new Node();
tail = new Node();
head->next = tail;
tail->prev = head;
size = 0;
}
int get(int index) {
if(index < 0 || index > size) return -1;
Node* temp = head->next;
while(index--) temp = temp->next;
return temp->val;
}
void addAtHead(int val) {
Node* newNode = new Node(val);
Node* next = head->next;
next->prev = newNode;
newNode->next = next;
head->next = newNode;
newNode->prev = head;
size++;
}
void addAtTail(int val) {
Node* last_node = new Node(val);
Node* temp = tail->prev;
temp->next = last_node;
last_node->prev = temp;
last_node->next = tail;
tail->prev = last_node;
size++;
}
void addAtIndex(int index, int val) {
if(index < 0 || index > size+1) return;
if(index == 0) addAtHead(val);
else if(index == size+1) addAtTail(val);
else{
Node* index_node = new Node(val);
Node* temp = head;
while(index--) temp = temp->next;
index_node->next = temp->next;
temp->next->prev = index_node;
temp->next = index_node;
index_node->prev = temp;
size++;
}
}
void deleteAtIndex(int index) {
if(index > size) return;
Node* temp = head;
while(index--) temp = temp->next;
temp->next = temp->next->next;
temp->next->prev = temp;
size--;
}
};
太感謝了
沒關系原來這個小家伙一直是問題:
void addAtHead(int val) {
Node* newNode = new Node(val);
Node* next = head->next;
next->prev = newNode;
newNode->next = next;
head->next = newNode;
newNode->prev = head;
size++;
}
你初始化了tail to head next,但是在你的addToHead function中你從來沒有移動tail而是添加到head->next,所以在添加一次之后你的新節點將成為tail,並且在兩次迭代之后,你的新節點將超過你的tail,領先於你的尾巴。 然后你調用你的 addToTail function 所以當你這樣做時,tail->prev = last_node,記住 tail-prev 之前是什么:那是正確的頭,所以你將不再有頭節點,因此鏈被破壞了,下次你嘗試調用 addToHead,你找不到你的頭,你沒有指向它的指針,所以它崩潰了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.