错误记录

本文深入解析链表及数据结构中常见的错误,如成员访问空指针、数组越界等问题,并提供解决方法,强调在使用链表时确保结点非空的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构

出错信息
runtime error: reference binding to null pointer of type ‘int’

解析
数组越界

vector<int> vi;
if(i==0) vi[i]=0;

链表

2-两数相加

runtime error: member access within null pointer of type ‘struct ListNode’

(转自: https://blog.youkuaiyun.com/qq_40086556/article/details/81869349)
写在前面

这个BUG是我在做LeetCode的链表一类题目的时候遇到的,觉得还是蛮有代表性的,因为刚开始遇到这个BUG,我完全不知道哪里有问题,还与正确答案反复对比,结果发现完全一样,但我的就报错,后来发现原来是这个知识点完全没有接触过,所以就通过这篇博客来记录一下自己犯得错误,来提醒自己。
错误提示

这里写图片描述
错误原因

详细错误原因可以参考: LeetCode-206. Reverse Linked List。

错误的含义:类型为“struct ListNode”的空指针内的成员访问。

根据:LEETCODE 中的member access within null pointer of type ‘struct ListNode’ 与112. Path Sum ,其实不难理解,这个问题主要是由于测试系统不知道当前的结点与结点的下一个结点是否为NULL,而自己有没有声明,所以系统不确定,于是就报错。这也说明了链表中的结点使用的时候比其他数据结构要严格一些,一定要时刻保证使用的结点不为NULL,为NULL要做出相应处理。
解决方法

刚开始按照别人的解决方法依葫芦画瓢做了一个判别语句:

while(second != NULL && second->next != NULL && first != NULL){
    ...
}

1
2
3

但是依葫芦画瓢的都不是特准确,所以还是要好好理解。比如,在我使用:

ListNode *second=head->next;

1

这个语句语义上没有问题,但是要确定head与head->next均不为NULL,所以就添加下面的语句即可:

while(head==NULL||head->next==NULL) 
    return head;

数据结构使用错误

循环后未清空

  1. 无重复字符的最长子串
int l = s.length();
        vector<int> vi;
        unordered_set<char> us;
        for(int i=0; i<l; i++){
            us.insert(s[i]);
            int j;
            for(j=i+1; j<l; j++){
                if(us.count(s[j])!=0) break;
                else us.insert(s[j]);
            }
            us.clear();  //在这里要对us清空
            vi.push_back(j-i);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值