【发布时间】:2020-07-13 10:28:37
【问题描述】:
我的 enQueue 函数中存在分段错误,我不明白它为什么存在(除了我正在访问我不允许访问的内存这一事实)。
我的 enQueue 函数旨在在链表的头部插入一个节点。我的deQueue函数是为了遍历链表,删除链表的尾部。
以下是相关的结构:
typedef struct studstruct{
int age;
struct studstruct *nextPtr;
}Student;
typedef struct linkedlist{
Student *head, *tail;
}StudentList;
这是我的主要功能:
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 函数:
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 函数:
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 函数,它为我的节点动态分配内存:
Student *createStudentNode(int data){
Student *node;
node = (Student *)malloc(sizeof(Student));
if(node){
node->nextPtr=NULL;
node->age=data;
}
return node;
}
【问题讨论】:
-
在
enQueue()中,node不是节点,而是指向列表“base”的指针,因此名称有点晦涩:但无论如何:您是否应该设置 @ 987654328@ 和/或node->tail?顺便说一句,enQueue()是打算追加还是前置?而deQueue()似乎没有考虑node->head可能是NULL的可能性,但也可能应该设置node->head和/或node->tail? -
使用调试器并查看故障线可以立即解决此类问题,我强烈推荐它。