链接列表中的运行时错误:“ListNode”类型的空指针内的成员访问
Posted
技术标签:
【中文标题】链接列表中的运行时错误:“ListNode”类型的空指针内的成员访问【英文标题】:Runtime error in Linked List :member access within null pointer of type 'ListNode' 【发布时间】:2021-01-13 03:22:38 【问题描述】:我得到了两个非空链表,代表两个非负整数,我试图将这两个数字相加并将总和作为链表返回。 我收到一个错误提示
字符 18:运行时错误:“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;
;
错误显示在 Line with code 中
res->val = sum;
【问题讨论】:
小测验:什么是“ListNode* res = new ListNode(0);
”? res->next;
会在这里做什么?当res=res->next;
时,您期望会发生什么?你试过explaining every line of your program to your rubber duck吗?
另外请尝试向你的橡皮鸭解释循环while(l1->next !=NULL)
,并告诉它你在哪里修改l1
。
【参考方案1】:
首先,这段代码有很多错误,你没有更新 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。 它将让您更好地了解如何解决此类问题。
【讨论】:
以上是关于链接列表中的运行时错误:“ListNode”类型的空指针内的成员访问的主要内容,如果未能解决你的问题,请参考以下文章