[英]unknown value linked list in C
我的程序應該打印
9 8 7 6 5 4 3 2 1 0
但它打印
9 8 7 6 5 4 3 2 1 0 245858 558254
我找不到問題
create_list是一種功能,它返回指向list_value“鏈接列表”的指針。create_list t調用插入函數以在鏈接列表的開頭添加新值。 關聯是將數據“整數”打印的功能
這里:
#include<stdio.h>
#include<string.h>
struct liste_value
{
int d;
struct liste_value *next;
};typedef struct liste_value LISTE_VALUE;
void insertion(LISTE_VALUE **first,int a)
{
LISTE_VALUE *p;
p=(LISTE_VALUE*)malloc(sizeof(LISTE_VALUE));
p->d=a;
p->next=*first;
*first=p;
}
LISTE_VALUE* create_list()
{ int i;
LISTE_VALUE* first;
for(i=0;i<10;i++)
{
insertion(&first,i);
}
return(first);
}
void affiche(LISTE_VALUE *first)
{ LISTE_VALUE *p=first;
while(p)
{
printf("data = %d\n",p->d);
p=p->next;
}
}
void main()
{
LISTE_VALUE *E;
E=create_list();
affiche(E);
}
問題出在您的create_list
函數中:
LISTE_VALUE* create_list()
{ int i;
LISTE_VALUE* first; // <<== Here
for(i=0;i<10;i++)
{
insertion(&first,i);
}
return(first);
}
你不初始化first
指針,但其值在以后使用insertion
作為列表的最后一個節點的下一個元素的指針:
void insertion(LISTE_VALUE **first,int a)
{
LISTE_VALUE *p;
p=(LISTE_VALUE*)malloc(sizeof(LISTE_VALUE));
p->d=a;
p->next=*first; // <<== In the first call, *first is uninitialized
*first=p;
}
添加= NULL
可解決此問題:
LISTE_VALUE* create_list()
{ int i;
LISTE_VALUE* first = NULL; // <<== Fix
for(i=0;i<10;i++)
{
insertion(&first,i);
}
return(first);
}
該功能無效
LISTE_VALUE* create_list()
{ int i;
LISTE_VALUE* first;
for(i=0;i<10;i++)
{
insertion(&first,i);
}
return(first);
}
first變量未初始化,因此具有任意值。 你必須寫
LISTE_VALUE* first = NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.