【发布时间】:2021-09-10 10:18:06
【问题描述】:
这些是我定义的结构。
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
【问题讨论】:
-
stud2=stud1->link;感觉这是造成问题的原因 -
我删除了 C++ 标签,因为看起来 C++ 解决方案不是您想要的。可能不是正确的调用,因为转换
malloc的结果是 C++ 的事情,但远不如new的 C++ 事情。 -
stud1->link=(StudNode*)malloc(sizeof(StudNode));看起来不太对劲。更少你要初始化节点,你可能想要一个像stud1->link=NULL这样的哨兵。 -
建议:画出您希望这些节点如何链接的图片,然后完全按照说明跟踪您的代码,看看您是否可以绘制相同的图片。如果不能,您可能会立即看到并知道代码做错了什么。
-
“不像我想的那样工作”、“代码抛出奇怪的输出”、“主函数中的代码”都是无用的模糊。请学习并申请How to Ask,制作minimal reproducible example,描述所需的输出,解释与你得到的输出的对比。除此之外,衣架可视化可能会有所帮助 - 通常在涉及链接列表等时。