我有一个小的双链表应用程序。我想在列表中添加元素,然后正常显示列表。在输出我得到我插入的元素好吧,但在他们之后我得到一堆奇怪的数字(如...... 28482 -20048 2817 ......) 我认为这是空间分配的问题。
感谢任何帮助,谢谢!
# include <stdio.h>
# include <conio.h>
# include <string.h>
# include <stdlib.h>
typedef struct elem {
int number;
struct elem * urm;
struct elem * prec;
}nod;
nod *prim=NULL,*ultim=NULL, *local=NULL, *p=NULL;
void insert_element(int numb){
nod *local=(nod *)malloc(sizeof(nod));
local->number = numb;
if (prim==NULL){
prim=local;
ultim=local;
}
else{
ultim->urm = local;
local->prec = ultim;
ultim=local;
}
}
void load_data()
{
int i,n;
nod *c = (nod *)malloc(sizeof(nod));
printf("\n cate elemente va avea lista?");
scanf("%d", &n);
printf("avem %d elemente", n);
for(i=1;i<=n;i++){
printf("\n number: ");
scanf("%d", &c->number);
insert_element(c->number);
}
}
void list_left_to_right()
{
nod *p = (nod*) malloc(sizeof(nod));
p=prim;
while(p){
printf("%d ", p->number);
p=p->urm;
}
printf("\n");
}
int main()
{
int op;
do{
printf("\n1.Enter some data\n");
printf("2.Display left - > right the data\n");
printf("0.Exit\n");
printf("choice : ");
scanf("%d",&op);
switch(op){
case 1: load_data(); break;
case 2: list_left_to_right(); break;
case 0: break;}
}
while (op!=0);
return 0;
}
答案 0 :(得分:0)
(1)list_left_to_right()
:
nod *p = (nod*) malloc(sizeof(nod));
p=prim;
这会泄漏malloc()
返回的块。
(2)
void insert_element(int numb) {
nod *local=(nod *)malloc(sizeof(nod));
local->number = numb;
// TODO: set local->urm and local->prec to NULL
if (prim==NULL) {
prim=local;
ultim=local;
好的,所以第一次调用insert_element()
时,新元素就是头部和尾部。
错误:您需要将urm
和prec
字段设置为NULL。它们最初有未定义的值。
}
else {
ultim->urm = local;
local->prec = ultim;
ultim=local;
}
}
之后,后续元素将作为新尾部插入( ultim )。
错误:但您需要确保将local-&gt; urm设置为NULL。