通过用户输入打印链接列表

时间:2018-11-02 22:16:16

标签: c

我是一个初学者,正在参加通过用户输入创建和打印链接列表的活动。创建零件的过程很顺利,但是每次尝试打印最终列表时,都会收到令人讨厌的“ LIST IS EMPTY”消息。 * stnode指针可能存在问题。有人可以帮我吗?谢谢您的回答!

代码

#! It would be possible to not allow the user to update the
#std dev of Variable objects, in which case AffineScalarFunc
#objects could have a pre-calculated or, better, cached
#std_dev value (in fact, many intermediate AffineScalarFunc do
#not need to have their std_dev calculated: only the final
#AffineScalarFunc returned to the user does).

3 个答案:

答案 0 :(得分:0)

在createnotelist()中,您将使用 stnode 的本地声明隐藏全局 stnode 。因此,全局 stnode 仍未定义或为null,并且未在createnodelist()中进行修改。

答案 1 :(得分:0)

您的createnodelist函数什么都不做(除了泄漏内存)。

它声明了一个名为stnode的局部变量:

struct node *stnode = (struct node*)malloc(sizeof(struct node)), *fnnode, *temp;

但是当函数返回时,该局部变量将被销毁,因此无法访问已构建的列表。

尤其是,此stnode与具有相同名称的全局变量无关。

您的printnode函数执行此操作:

struct node *n = (struct node*)malloc(sizeof(struct node));

n = stnode;

(请注意,这是内存泄漏:n = stnode会覆盖从malloc返回的指针,该指针现在变得不可访问,无法释放。)

stnode是全局变量。它从未设置过,因此它仍然包含其初始值NULL

答案 2 :(得分:0)

createnodelist中,写

void createnodelist(int n)
  {
  int num, i;
  stnode = (struct node*)malloc(sizeof(struct node));
  struct node *fnnode, *temp;

代替

void createnodelist(int n) {
  int num, i;
  struct node *stnode = (struct node*)malloc(sizeof(struct node)), *fnnode, *temp;

否则,您将引入一个局部变量,该变量将隐藏稍后在stnode函数中使用的全局printnode

BTW:struct node *n = (struct node*)malloc(sizeof(struct node));中的printnode是多余的,因为您在下一条语句中覆盖了n的值;只需编写struct node *n = stnode就可以了。