我是一个初学者,正在参加通过用户输入创建和打印链接列表的活动。创建零件的过程很顺利,但是每次尝试打印最终列表时,都会收到令人讨厌的“ 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).
答案 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
就可以了。