如何返回线性表中元素的指针?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,提问作者Михайло Куриця
相关产品推荐
相关产品推荐

