我与这两个结构的工作返回一个列表节点相隔一个链表,第一个拥有员工信息,而第二个保存的列表信息:功能在C
typedef struct ListNodeTag{
int idNumber;
struct ListNodeTag *next;
} Employee;
typedef Employee Item;
typedef struct {
int size;
Item *head;
} List;
我已经调用此函数我在其中发送一个位置,列表的头部,以及一个指向员工以外的元素的指针。
void Peek (int position, List *L, Item *X) {
int i;
Item *currentPtr;
currentPtr = L->head;
for(i = 0; i < position; i++){
if(currentPtr->next == NULL){
X = currentPtr;
break;
}
currentPtr = currentPtr->next;
}
X = currentPtr;
}
我在这个循环中调用了从主函数Peek。
for(i=0;i<Length(&L);i++){
Peek(i,&L,&S);
printf(" %d%\n",idNumber);
}
它的目的是打印列表中的每个成员与雇员ID在一个新的行。该列表的第一部件然而,当第二被调用时,一个SEG-故障发生在线路currentPtr = currentPtr->next;
我的列表中的数据是从该插入功能填充:
void Insert (Item X, int position, List *L) {
int i;
Item *currentPtr,*previousPtr;
Item *temp = malloc(sizeof(Item));
temp->idNumber = X.idNumber;
temp->next = NULL;
previousPtr = NULL;
if(L->head == NULL){
L->head = temp;
}
else{
currentPtr = L->head;
for(i=0;i<=position && currentPtr!=NULL;i++){
previousPtr = currentPtr;
currentPtr = currentPtr->next;
}
temp->next = currentPtr;
previousPtr->next = temp;
}
L->size +=1;
}
一旦印刷,我我能够在没有segfault的情况下获得结果,但是,无论列表是多长时间,它都会重复相同的条目。 EG:长度为3我得到:
10925
10925
10925
你有一个'for'循环去每个'next'的位置。但是你没有检查是否碰到了“next”,它是NULL。但是,这里有很多代码缺失,所以很难说出你是如何填充数据的。 – lurker
我已添加我的插入功能以获取更多详细信息。如果它命中NULL,那么我认为它应该自动中止以避免seg-fault? – user2225940
它会如何“自动”中止?如果它引用NULL作为下一个指针,它将会出现段错误。因此,想象一下在循环迭代中,'currentPtr-> next'的值为NULL的情况。然后,下一个'currentPtr'的值由赋值变为NULL。然后下一次循环尝试,本质上,'NULL-> next'将会出现段错误。 – lurker