我正在使用这两个结构,第一个保存员工信息,第二个保存列表信息:
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