방금 연결된 구조 목록에 정보가 저장된 코스의 GPA를 계산하는 실험실에서 시작되었습니다. 지금은 모든 코스 정보를 제대로 인쇄하여 링크 목록에 제대로 초기화되었는지 확인하려고합니다.구조체 링크 목록 분할 오류
나는 세그먼트 오류가 계속 발생하기 때문에 문제가 발생합니다. 세그멘테이션 오류의 의미를 이해하지만 실수를 저지르고있는 부분을 알지 못합니다. 어떤 도움을 주시면 감사하겠습니다. 첫 번째 노드 (head == NULL
)를 삽입 할 때
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAX_CLASSES 20
/* Function Prototypes */
struct course * initcourse(int, char *, char *, float, char *, char *);
void add(struct course *);
/* Definition of a data node holding course information */
struct course {
int term;
char name[15];
char abbrev[20];
float hours;
char grade [4];
char type[12];
struct course *next;
};
/* head points to first node in list, end points to last node in list */
/* initializes both to NULL, no nodes yet */
struct course *head = (struct course *) NULL;
struct course *end = (struct course *) NULL;
/* Initializes a node, allocates memory for the node, and returns */
/* a pointer to the new node. Must pass correct parameters. */
struct course * initcourse(int term, char *name, char *abbrev, float hours, char *grade, char *type)
{
struct course *ptr;
ptr = (struct course *) calloc(1, sizeof(struct course));
if(ptr == NULL)
return (struct course *) NULL;
else
{
ptr->term = term;
strcpy(ptr->name, name);
strcpy(ptr->abbrev, abbrev);
ptr->hours = hours;
strcpy(ptr->grade, grade);
strcpy(ptr->type, type);
return ptr;
}
}
/* This adds a node to the end of the list. You must allocate a node and */
/* then pass its address to this function */
void add(struct course *new)
{
if (head == NULL)
{
head = new;
}
else
{
end->next = new;
end = new;
}
}
/* Prints all information in a node */
void printnode(struct course *ptr)
{
printf("Term ->%d\n", ptr->term);
printf("Name ->%s\n", ptr->name);
printf("Abbreviation ->%s\n", ptr->abbrev);
printf("Hours ->%f\n", ptr->hours);
printf("Grade ->%s\n", ptr->grade);
printf("Type ->%s\n", ptr->type);
}
/* Prints List of Nodes */
void printlist(struct course *ptr)
{
while(ptr != NULL)
{
printnode(ptr);
ptr = ptr->next;
}
}
/* Calculates GPA */
/* float gpa (struct course *ptr) */
/* { */
/* float totalhours; */
/* float gpa; */
/* float gradepoints; */
/* while (ptr != NULL) */
/* { */
/* totalhours += (ptr->hours); */
/* gradepoints = (ptr->hours * ptr->grade); */
/* } */
/* gpa = (gradepoints /ptr->hours); */
/* } */
int main()
{
int term;
char name[15];
char abbrev[20];
float hours;
char grade[4];
char type[12];
float gpa;
struct course *ptr;
struct course course1, course2, course3;
course1.term = 1234;
strcpy(course1.name,"cse1234");
strcpy(course1.abbrev,"systems");
course1.hours = 4;
strcpy(course1.grade,"A");
strcpy(course1.type,"GEC");
ptr = initcourse(course1.term, course1.name, course1.abbrev, course1.hours, course1.grade, course1.type);
struct course *head, *ptr2;
head = ptr;
// ptr2 = ptr;
add(ptr);
course2.term = 4332;
strcpy(course2.name,"cse4332");
strcpy(course2.abbrev,"Database");
course2.hours = 4;
strcpy(course2.grade,"B");
strcpy(course2.type,"Technical");
ptr2 = initcourse(course2.term, course2.name, course2.abbrev, course2.hours, course2.grade, course2.type);
add(ptr2);
printlist(head);
}
seg fault = ** 디버거를 사용하십시오! ** –