这个节点并不像我想的那样工作?

This Node doesn't work the way I thought?

这些是我定义的结构。


typedef struct stud{
    int StudId;
    float GradePt;
}STUDENT;

typedef struct StudentNode{
    STUDENT* stud;
    struct StudentNode* link;
}StudNode; 

下面是main函数中的代码。我只想创建一个链接在一起的 STUDENT 节点的单链表。但是我的代码抛出奇怪的输出

StudNode* stud1;
StudNode* stud2;
stud1=(StudNode*)malloc(sizeof(StudNode));
stud1->stud->GradePt=3.54;
stud1->stud->StudId=4724;
stud1->link=(StudNode*)malloc(sizeof(StudNode));
stud2=(StudNode*)malloc(sizeof(StudNode));
stud2=stud1->link;
stud2->stud->GradePt=3.89;
stud2->stud->StudId=3424;
cout<<stud1->stud->StudId<<" has a grade of "<<stud1->stud->GradePt<<" out of 4"<<endl;
cout<<stud2->stud->StudId<<" has a grade of "<<stud2->stud->GradePt<<" out of 4"<<endl;
Output:
3424 has a grade of 3.89 out of 4
3424 has a grade of 3.89 out of 4

--------------------------------
Process exited after 1.216 seconds with return value 3221225477

StudNode 应该是:

typedef struct StudentNode{
    STUDENT stud;                // No more a pointer
    struct StudentNode* link;
} StudNode; 

当然后面还要改stud的访问权限

下面几行有问题:

stud1->link=(StudNode*)malloc(sizeof(StudNode));    // Line 1
stud2=(StudNode*)malloc(sizeof(StudNode));          // Line 2
stud2=stud1->link;                                  // Line 3

在上面的代码中,您有内存泄漏:stdu2 在第 2 行获取分配的内存,并且在指针被 stdu1->link 替换后立即在第 1 行分配。

可能第 1 行应该是 stud1->link = NULL;

代码变为:

typedef struct stud{
    int StudId;
    float GradePt;
}STUDENT;

typedef struct StudentNode{
    STUDENT stud;
    struct StudentNode* link;
} StudNode; 

StudNode* stud1;
StudNode* stud2;

// Initialize node 1
stud1=(StudNode*)malloc(sizeof(StudNode));
stud1->stud.GradePt=3.54;
stud1->stud.StudId=4724;
stud1->link=NULL;

// Initialize node 2
stud2=(StudNode*)malloc(sizeof(StudNode));
stud2->stud.GradePt=3.89;
stud2->stud.StudId=3424;
stud2->link=NULL;

// Link node 1 to node 2
stud1->link=stud2;

// Show data
cout<<stud1->stud.StudId<<" has a grade of "<<stud1->stud.GradePt<<" out of 4"<<endl;
cout<<stud2->stud.StudId<<" has a grade of "<<stud2->stud.GradePt<<" out of 4"<<endl;