You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ListNode类型空指针访问运行时错误的问题咨询与代码修复求助

错误原因与修复方案

错误含义

这个运行时错误的核心是空指针访问:你尝试对一个值为nullptr的指针(current_3)调用成员变量val,这属于C++中的未定义行为,会直接触发崩溃。

代码中的问题分析

  1. current_3初始为空
    你声明的l3是默认构造的ListNode,其next成员默认是nullptr,所以current_3 = l3.next;一开始就是空指针,进入循环后执行current_3->val = digit;必然报错。

  2. 跳过了链表首节点
    输入链表l1和l2的第一个节点就存储着数字,但你把current_1和current_2初始化为l1->next和l2->next,直接跳过了首节点,导致计算缺失开头的数值。

  3. 未处理链表长度差异
    你的循环仅在两个链表都有剩余节点时执行,若其中一个链表更长,剩余的节点没有被纳入计算。

  4. 忽略了最终进位
    当两个链表遍历完成后,如果carry不为0(例如999+999=1998,最后会剩余进位1),需要额外添加一个节点存储这个进位值。

  5. 返回栈对象地址
    l3是函数内的栈局部对象,函数执行结束后会被系统销毁,返回&l3相当于返回一个无效的野指针,后续使用该指针会导致未知错误。

修复后的代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        int carry = 0;
        // 用哑节点简化链表操作,避免处理头节点为空的情况
        ListNode dummy;
        ListNode* current_3 = &dummy;
        
        // 直接从链表首节点开始遍历,同时处理链表长度不同和进位的情况
        while (l1 != nullptr || l2 != nullptr || carry != 0) {
            int sum = carry;
            if (l1 != nullptr) {
                sum += l1->val;
                l1 = l1->next;
            }
            if (l2 != nullptr) {
                sum += l2->val;
                l2 = l2->next;
            }
            
            carry = sum / 10;
            // 新建节点存储当前位的数字
            current_3->next = new ListNode(sum % 10);
            current_3 = current_3->next;
        }
        
        // 返回哑节点的next,即结果链表的首节点
        return dummy.next;
    }
};

修复说明

  • 使用哑节点(dummy node):避免处理结果链表头节点为空的复杂情况,简化代码逻辑。
  • 循环条件覆盖所有情况:只要任一链表还有节点,或者还有进位未处理,就继续循环。
  • 动态创建节点:用new在堆上创建结果节点,避免栈对象销毁导致的野指针问题。
  • 正确遍历输入链表:从l1和l2的首节点开始遍历,不跳过任何数值。

内容的提问来源于stack exchange,提问作者Ece Akdeniz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:31:02