我正在使用这两个结构,第一个保存员工信息,第二个保存列表信息:
typedef struct ListNodeTag{
int idNumber;
struct ListNodeTag *next;
} Employee;
typedef Employee Item;
typedef struct {
int size;
Item *head;
} List;
我有一个名为 Peek 的函数,我在其中发送一个位置、列表的头部和一个指向 Employee 之外的元素的指针。
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;
}
我在这个循环中从 main 调用函数 Peek。
for(i=0;i<Length(&L);i++){
Peek(i,&L,&S);
printf(" %d%\n",idNumber);
}
其目的是在新行上打印带有员工 ID 的列表中的每个成员。然而,列表的第一个成员,当第二个被调用时,会在该行发生 seg-faultcurrentPtr = 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;
}
打印后,我可以在没有段错误的情况下获得结果,但是,无论列表有多长,它都是重复的相同条目。EG:对于 3 的长度,我得到:
10925
10925
10925