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

链表指定索引节点获取:索引越界引发段错误的问题排查

链表节点获取函数的段错误修复方案

原代码的问题分析

  1. 无符号整数判断无效:index 是 unsigned int 类型,它的取值范围是≥0,所以 index < 0 的判断永远不会触发,属于无效代码。
  2. 边界判断遗漏:循环结束后,i 的值等于链表的节点总数(比如链表有3个节点,循环结束时i=3),此时如果index == i也属于超出链表范围,但原代码只判断了index > i,漏掉了这种相等的情况。
  3. 冗余判断逻辑:当循环遍历完所有节点(temp == NULL)时,说明指定索引的节点不存在,此时直接返回NULL即可,不需要额外的条件判断。

修正后的代码

listint_t *get_nodeint_at_index(listint_t *head, unsigned int index)
{
        listint_t *temp;
        unsigned int i;

        i = 0;
        temp = head;
        while (temp != NULL)
        {
                if (index == i)
                {
                        return temp;
                }
                temp = temp->next;
                i++;
        }
        // 遍历完所有节点仍未找到,直接返回NULL
        return NULL;
}

修复说明

  • 移除了无效的index < 0判断,因为无符号整数不可能小于0。
  • 去掉了多余的index > i判断,因为循环结束意味着已经遍历完所有节点,无论index是等于还是大于i,都属于无效索引,直接返回NULL即可。
  • 简化了逻辑,让代码更清晰,同时彻底避免了因索引超出范围导致的段错误——因为永远不会访问NULL指针的next成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:42:05