**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
社区在2天前审查了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
Improve this question
我有一个函数,返回一个特定索引的节点,但是当索引大于链表的长度时,我得到一个分段错误,我写了一个条件来处理这个问题
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++;
}
if (index < 0 || index > i)
return NULL;
}
1条答案
按热度按时间r7knjye21#
您没有与我们共享的调用代码可能在尝试解引用NULL返回值时崩溃。
head->next
必须是列表末尾的NULL
,所以你不需要i
vsindex
检查,因为如果index
太大,你会用完元素。因为参数在C中是通过值传递的,你可以只使用head
参数,而不是引入本地变量temp
:index < 0
永远不会为真,因为index
是unsigned int
。下面是一个演示工作代码的最小程序:
示例输出:
POSIX标准1003.1,B.2.12数据类型保留了
_t
名称后缀btw,因此我建议您为类型使用不同的名称。