"程序收到信号SIGSEGV,分段故障"在C.

时间:2016-11-13 15:38:04

标签: c arrays struct malloc

我在收集和验证用户程序中成绩的整数输入时遇到问题。等级与courseRecord中的伴随课程名称一起存储在一个结构中。应该有2个这样的结构在studentRecord结构中创建并存储为大小为2的数组,其中应该存储数据。

我知道这不是我唯一的问题,因为我可以通过调试菜单上的手表看到,虽然studentRecord中有一种类型的子结构,但我没有2。目前我只使用1可用,然后我打算调整代码以包含第二个。

程序收到的信号SIGSEGV,Segmentation fault"的具体错误,它指出当用户第一次输入任何数字等级时,让我相信某处存在内存分配错误。我试图使用malloc函数,但它仍然无法正常工作意味着我显然没有正确使用它。我正在使用当前的GNU GCC编译器/链接器,如代码:blocks软件中所示。这是代码:

的main.c

#include <stdlib.h>
#include "defs.h"

int main()
{
getGradeAverage();
return EXIT_SUCCESS;
}

的defs.h

#include <stdio.h>
#include <math.h>
#define MAX_LENGTH 40

typedef struct courseRecord
{
char courseName [MAX_LENGTH+1];
int grade;
}courseRecord[2];

typedef struct studentRecord
{
char studentName [MAX_LENGTH+1];
struct courseRecord;
}studentRecord;


void getUserName ();
void getCourse (index);
void GPAPrint ();
void getGradeAverage ();

lib.c

#include "defs.h"
#include <stdbool.h>
#include <string.h>

//Gets username, assigns it to struct studentRecord.
//Known working.

void getUserName ()
{
studentRecord sr;
printf ("please enter the your name:");
scanf("%40[^\n]%*c",sr.studentName);
}
//Gets course name and grade, assigns to array of size 2 of struct courseRecord in studentRecord
void getCourse ()
{
int i;
studentRecord sr;
printf("please enter the name of course 1:");
scanf("%40[^\n]%*c",sr.courseName);
malloc(sizeof(sr.grade));
do{
    printf("please enter the grade for course 1:");
    scanf("%i",sr.grade);
    if ((scanf("%i",sr.grade))!=1)
    {
        printf("sorry, that grade is in letter form. Please try again.\n");
        fflush(stdin);
        continue;
    }
    else if (sr.grade!=-2||0||2||4||6||8||10||12);
    {
        printf("sorry, that grade is not on the scale. Please try again.\n");
        fflush(stdin);
        continue;
    }
} while(true);
}

void GPAPrint ()
{
int GPA;
studentRecord sr;
/*
GPA=(sr.grade[1]+sr.grade[2])/2
printf("Student name: %s\n",&sr.studentName\n\n);
printf("Course: %s\nGrade:%i\n"sr.coursename[1], sr.grade[1])
printf("Course: %s\nGrade:%i\n"sr.coursename[2], sr.grade[2])
printf("total GPA is %i",GPA)
*/


}

void getGradeAverage ()
{
getUserName();
getCourse();
GPAPrint();
}

感谢您的帮助!

0 个答案:

没有答案