繁体   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