簡體   English   中英

鏈接列表中的運行時錯誤:“ListNode”類型的 null 指針中的成員訪問

[英]Runtime error in Linked List :member access within null pointer of type 'ListNode'

我得到兩個代表兩個非負整數的非空鏈表,我試圖將這兩個數字相加並將總和作為鏈表返回。 我收到一個錯誤,上面寫着

字符 18:運行時錯誤:null 類型“ListNode”(solution.cpp)指針內的成員訪問摘要:UndefinedBehaviorSanitizer:未定義行為

為什么我得到這個數組,我該如何解決這個問題?

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        int carry=0,sum = 0;
        ListNode* res = new ListNode(0);
        while(l1->next !=NULL){
            sum = carry + l1->val + l2->val;
            if(sum>9)
                carry = 1;
            else
                carry = 0;
            
            res = res->next;
            
            res->val = sum;
        }
        return res;
        
    }
};

錯誤顯示在與代碼一致

         res->val = sum;

這段代碼首先有很多錯誤,你沒有更新 l2 的值,所以最終你試圖將 l1 的所有值與 l2 的 head->node 相加,這是荒謬的。

至於錯誤,它的發生是因為您正在創建一個新節點ListNode* res = new ListNode(0); 因此,根據此創建一個名為 res 的新節點, res- res->next將包含NULL ,我猜測這是根據您的ListNode class 的構造函數調用。

所以 w.r.t 以上語句res = res->next; 現在 res 指向 NULL。 進一步res->val = sum; 您正在嘗試訪問 null 中的值,從而給您運行時錯誤,因為您正在嘗試訪問未分配的內容。

我建議您首先嘗試簡單的問題“將 1 添加到給定的鏈表”。 因為當你將 1 添加到 999 時它也可以生成進位,結果鏈表應該是 1000。
它將使您更好地了解如何解決此類問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM