我正在尝试在列表中的最后一个位置之后引入元素。结果,一个带有由函数创建的点的列表,但不是我想要的。
#include <stdio.h>
#include <stdlib.h>
typedef int DATA;
struct lista {
DATA info;
struct lista *urm;
};
typedef struct lista Lista,*LISTA;
LISTA newl();
LISTA inserare_in_fata(LISTA l,DATA x);
LISTA inserare_la_sfarsit(LISTA l,DATA x);
int main()
{
int x;
FILE *f;
LISTA l;
l=newl();
l=(LISTA)malloc(sizeof(Lista));
l->urm=NULL;
scanf("%d",&x);
l=inserare_in_fata(l,x); //insert a element in front of list
scanf("%d",&x);
l=inserare_la_sfarsit(l,x); // the function for insert as last element
//THE list after Running the program
printf("\n");
while(l->urm!=NULL)
{
printf("%d->",l->info);
l=l->urm;
}
printf("NULL");
}
LISTA newl()
{
return NULL;
}
LISTA inserare_la_sfarsit(LISTA l,DATA x)
{
LISTA w;
LISTA t=(LISTA)malloc(sizeof(Lista));
t->info=x;
if(l==NULL)
{
l->info=x;
return l;
}
else {
w=l;
while(w->urm!=NULL)
{
w=w->urm;
}
w->urm=t;
t->urm=NULL;
return l;
}
}
LISTA inserare_in_fata(LISTA l,DATA x)
{
LISTA f;
f=(LISTA)malloc(sizeof(Lista));
f->info=x;
if(l==NULL)
{
l->info=x;
return l;
}
else{
f->urm=l;
return f;
}
}
插入的数字是第一个为30,最后一个是10,这是插入问题。
答案 0 :(得分:0)
问题是列表中有一个虚拟节点,其中包含未初始化的值:在l
函数main
urm {{you initialize the "next" member
中分配to
的内存后1}} {NULL {1}} info`。
, but you don't initialize the data member
函数不会初始化它分配的内存,它分配的数据将具有 indeterminate 值,除了初始化它之外,还会导致未定义的行为,这就是你的情况。
初始化&#34;虚拟&#34;节点值,或想到另一个你不需要&#34;虚拟&#34;节点
答案 1 :(得分:0)
我看到的问题:
您需要
#include <stdio.h>
#include <stdlib.h>
在使用之前,您不会声明函数newl
,inserare_la_sfarsit
和inserare_in_fata
。添加以下声明
LISTA newl();
LISTA inserare_la_sfarsit(LISTA l,DATA x);
LISTA inserare_in_fata(LISTA l,DATA x);
之前main
。