分段错误,在动态分配的结构中动态分配结构

时间:2018-04-07 18:49:57

标签: c++ segmentation-fault structure project dynamic-memory-allocation

这是我的完整代码 ....它是一个很大的代码, 感谢您的时间

https://pastebin.com/Uj97g357

在上面的代码中,我想知道为什么我没有为结构内部的结构动态分配内存的确切原因。我通常会参与 codechef,hackerrank,codeforces 。但是,我做了一些这样的项目的新手......我已经调试了一下,所以我发现了错误的地方,但是我无法纠正它,我无法&# 39;安静地睡觉......如果你找到原因请告诉我并帮我结果 !!

简而言之,对于那些没有多余时间的人来说,我的代码就是 :): -

struct subject
{
    struct DateTime StartTime,EndTime;   //Don't bother about these structure definitions
    string ClassName,ClassType;
    int ThresholdPercentage,MaxPossiblePercentage;
    struct Note notes;                  //Don't bother about these structure definitions
};
struct students
{
    struct subject *subjects;
    string name;
    int MaxSubjects;
} *student;

int main(void)
{
    int NStudents,Subjects,i,j;
    cout<<"Enter Number of Students:- ";
    cin>>NStudents;
    student=(struct students*)malloc(sizeof(struct students)*(NStudents+1));
    cout<<'\n';
    for(i=1;i<=NStudents;i++)
    {
        cout<<"Enter Number of Subjects for "<<i<<" Student:- ";
        cin>>Subjects;
        student[i].MaxSubjects=Subjects;
        student[i].subjects=(struct subject*)malloc(sizeof(struct subject)*(Subjects+1));   
        cout<<'\n';
        for(j=1;j<=Subjects;j++)
        {
            cout<<"Enter the name of Subject "<<j<<" :- ";

            cin>>student[i].subjects[j].ClassName;//<<<==================FAULT HERE.
        }
    PrintStudentSubjects(i);
    }
    return 0;
}

实际问题

    struct subject
{
    struct DateTime StartTime,EndTime;   //Don't bother about these structure definitions
    string ClassName,ClassType;
    int ThresholdPercentage,MaxPossiblePercentage;
    struct Note notes;                  //Don't bother about these structure definitions
};
struct students
{
    struct subject *subjects;
    string name;
    int MaxSubjects;
} *student;

student=(struct students*)malloc(sizeof(struct students)*(NStudents+1));
student[i].subjects=(struct subject*)malloc(sizeof(struct subject)*(Subjects+1));//<<== In a loop..

这给了我一个分段错误......我不能使用malloc?,如果不是为什么?..如果是的话,怎么来赐教:)。

1 个答案:

答案 0 :(得分:1)

malloc()不会为您的类调用构造函数。使用new

student = new students[NStudents+1];
student[i].subjects = new subject[Subjects+1];