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

如何返回线性表中元素的指针?C++链表搜索函数返回报错问题

问题原因分析

  • 函数返回值类型不匹配:你声明的search函数返回类型为int,但需求是返回Item*类型的元素指针,类型不一致是直接触发报错的核心原因。
  • 返回值写法错误:*temp是对指针对象解引用,拿到的是Item结构体本身的实例值,而非指针地址,要返回指针直接返回temp即可。
  • 边界逻辑存在漏洞:如果链表为空、或者遍历完全表未找到匹配key,temp最终会是NULL,此时继续执行返回逻辑会触发空指针异常。
  • 类型匹配风险:如果struct Item里定义的datatype不是int类型,需要保证和传入的搜索参数x类型一致,否则temp->key == x的比较逻辑也会报错。

修正后代码

struct Item
{
    // 此处datatype需要和搜索参数x的类型匹配,示例统一用int
    int key;
    Item* next;
    Item* prev;
};

// 修改返回值类型为Item*
Item* List::search(int x)
{
    Item* temp = head;
    if (head == NULL)
    {
        cout << "Empty List" << endl;
        return NULL; // 空链表直接返回空指针,终止后续逻辑
    }
    while (temp != NULL)
    {
        if (temp->key == x) 
        {
            return temp; // 找到匹配项直接返回指针
        }
        temp = temp->next;
    }
    // 遍历完未找到匹配项,返回空指针
    cout << "Key not found" << endl;
    return NULL;
}

调用注意事项

调用该函数时需要先判断返回值是否为NULL,确认非空后再访问结构体成员,避免空指针访问崩溃,示例如下:

Item* result = myList.search(10);
if (result != NULL) {
    cout << "Found key: " << result->key << endl;
    // 其他对result的操作逻辑
}

内容的提问来源于stack exchange,提问作者Михайло Куриця

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:06:05