如何解决链接列表中的运行时错误:“ListNode”类型的空指针内的成员访问
我得到两个表示两个非负整数的非空链表,我正在尝试将这两个数字相加并将总和作为链表返回。 我收到一个错误,内容为
字符 18:运行时错误:“ListNode”类型的空指针内的成员访问 (solution.cpp) 总结:UndefinedBehaviorSanitizer:undefined-behavior
为什么我得到这个数组,我如何解决这个问题?
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;
}
};
错误显示在 Line with code
res->val = sum;
解决方法
此代码首先有很多错误,您没有更新 l2 的值,因此最终您试图将 l1 的所有值与 l2 的 head-> 节点相加,这是荒谬的。
至于错误,它的发生是因为您正在创建一个新节点 ListNode* res = new ListNode(0);
因此根据此创建一个名为 res 的新节点,res->next
将包含 NULL
,这我我猜测是根据您的 ListNode
类的构造函数调用。
所以 w.r.t 上面的语句 res = res->next;
现在 res 指向 NULL。
此外 res->val = sum;
您试图访问 null 中的值,从而导致运行时错误,因为您试图访问未分配的内容。
我建议您先尝试简单的问题“将 1 添加到给定的链表”。
因为当你把 1 加到 999 时它也会产生进位,结果链表应该是 1000。
它将让您更好地了解如何解决此类问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。