这个节点并不像我想的那样工作?
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;
这些是我定义的结构。
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;