首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在队列中调用enQueue函数时出现Seg错误

在队列中调用enQueue函数时出现Seg错误
EN

Stack Overflow用户
提问于 2020-04-01 23:42:39
回答 1查看 45关注 0票数 0

我的enQueue函数中有一个分段错误,我不明白为什么会出现这个错误(除了我正在访问不允许访问的内存的事实之外)。

我的enQueue函数的目的是在链表的头部插入一个节点。我的deQueue函数旨在遍历链表并删除链表的尾部。

下面是相关的结构:

代码语言:javascript
运行
复制
typedef struct studstruct{
  int age;
  struct studstruct *nextPtr;
}Student;

typedef struct linkedlist{
  Student *head, *tail;
}StudentList;

下面是我的主要函数:

代码语言:javascript
运行
复制
int main(void){
  StudentList *myQueue=initQueue();
  int tracker;

  tracker=enQueue(myQueue, 4);
  printf("Enqueue returned: %d\n", tracker);
  tracker=enQueue(myQueue, 3);
  printf("Enqueue returned: %d\n", tracker);
  tracker=enQueue(myQueue, 2);
  printf("Enqueue returned: %d\n", tracker);
  tracker=enQueue(myQueue, 1);
  printf("Enqueue returned: %d\n", tracker);

  printf("After enqueue:\n");
  printList(myQueue);

  (myQueue->head)=deQueue(myQueue);

  printf("After dequeue:\n");
  printList(myQueue);

  freeList(myQueue);
}

下面是我的enQueue函数:

代码语言:javascript
运行
复制
int enQueue(StudentList *node,int data){
  Student *newNode;
  newNode = createStudentNode(data);
  newNode->nextPtr=node->head;

  if(node->head==newNode->nextPtr){
    return 1;
  }
  else{
    return -1;
  }
}

下面是我的deQueue函数:

代码语言:javascript
运行
复制
Student* deQueue(StudentList *node){
  Student *temp=node->head;
  Student *temp2;

  while(temp->nextPtr!=NULL){
    temp2=temp;
    temp=temp->nextPtr;
  }
  free(temp2->nextPtr);
  temp2->nextPtr=NULL;

  return node->head;
}

下面是我的createNode函数,它为我的节点动态分配内存:

代码语言:javascript
运行
复制
Student *createStudentNode(int data){
  Student *node;
  node = (Student *)malloc(sizeof(Student));
  if(node){
    node->nextPtr=NULL;
    node->age=data;
  }
  return node;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-02 00:15:41

如果是前置追加,则忘记更改StudentList的新头部;如果是后置追加,则忘记更改尾部

代码语言:javascript
运行
复制
int enQueue(StudentList *node,int data){
  Student *newNode;
  newNode = createStudentNode(data);
  newNode->nextPtr = node->head;
  node->head = newNode;

  if(node->head==newNode->nextPtr){
    return 1;
  }
  else{
    return -1;
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60974845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档