C &引用;程序接收信号SIGSEGV,分段故障。”;来自gdb调试器的错误消息
while循环中的某些东西给了我这个错误。我不知道要查找什么,因为这个错误似乎是找到如何处理我的特定示例的常见方法C &引用;程序接收信号SIGSEGV,分段故障。”;来自gdb调试器的错误消息,c,linked-list,singly-linked-list,segmentation-fault,C,Linked List,Singly Linked List,Segmentation Fault,while循环中的某些东西给了我这个错误。我不知道要查找什么,因为这个错误似乎是找到如何处理我的特定示例的常见方法 #include <stdlib.h> #include <stdio.h> /*Structure declarations*/ struct Data { int id_number; float ratings; }; typedef struct Node{ struct Data player; struct Nod
#include <stdlib.h>
#include <stdio.h>
/*Structure declarations*/
struct Data {
int id_number;
float ratings;
};
typedef struct Node{
struct Data player;
struct Node *next;
}Node;
/*function declaration*/
void push(struct Node *list_head, int unique_id, float grade);
int main(){
/* Initialize list_head to Null since list is empty at first */
Node *list_head = NULL;
Node *traversalPtr;
push(list_head, 1, 4.0);
push(list_head, 2, 3.87);
push(list_head, 3, 3.60);
traversalPtr = list_head;
while(traversalPtr -> next != NULL){
printf("%d\n",traversalPtr -> player.id_number);
traversalPtr = traversalPtr -> next;
}
}
...function declarations
#包括
#包括
/*结构声明*/
结构数据{
国际身份证号码;
浮动评级;
};
类型定义结构节点{
结构数据播放器;
结构节点*下一步;
}节点;
/*函数声明*/
无效推送(结构节点*列表头,整数唯一id,浮动等级);
int main(){
/*将列表头初始化为Null,因为列表最初为空*/
节点*列表头=空;
节点*traversalPtr;
推送(列表头,1,4.0);
推动(列表_头,2,3.87);
推动(列表_头,3,3.60);
traversalPtr=列表头;
while(traversalPtr->next!=NULL){
printf(“%d\n”,traversalPtr->player.id\u编号);
traversalPtr=traversalPtr->next;
}
}
…函数声明
问题是函数
void push(struct Node *list_head, int unique_id, float grade);
处理main中定义的原始指针的副本,因为指针是通过值传递的
您应该像这样声明函数
void push(struct Node **list_head, int unique_id, float grade);
就这样说吧
push( &list_head, 1, 4.0 );
下面是一个如何定义函数的示例(我假设函数在尾部附加节点)
还有这个循环
traversalPtr = list_head;
while(traversalPtr -> next != NULL){
printf("%d\n",traversalPtr -> player.id_number);
traversalPtr = traversalPtr -> next;
}
这是不正确的。应该是这样的
traversalPtr = list_head;
while(traversalPtr != NULL){
printf("%d\n",traversalPtr -> player.id_number);
traversalPtr = traversalPtr -> next;
}
您需要将列表头的地址传递给push()。欢迎!请在你的问题中加入推送的定义。正如@VladfromMoscow所说,您的push函数声明/定义有问题。我要指出的是,
push
不一定是调用自己,因为没有提供push
的定义,只是声明。我们确实需要push()
的定义来最终回答这个问题@CodakBlack,是否可以将其编辑到您的问题中?如果您已经在调试器中运行了程序,并且出现了此错误,您应该可以确切地看到该错误的来源。在那里,您可以检查您的变量并检查预期值与实际值。
traversalPtr = list_head;
while(traversalPtr != NULL){
printf("%d\n",traversalPtr -> player.id_number);
traversalPtr = traversalPtr -> next;
}