[英]linked list in C programming
我不知道這段代碼有什么問題。 當我“顯示”我從“ADD”輸入的項目時,會顯示許多不必要的項目。 為什么會這樣?
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
struct list
{
char name[20];
int age;
char gender[10];
struct list *next;
};
void main(void)
{
struct list *HEAD = NULL;
struct list *temp, *trav;
char choice;
while(1)
{
clrscr();
printf("MENU\n");
printf("A) ADD\n");
printf("B) DISPLAY\n");
printf("X) EXIT\n");
scanf("%c", &choice);
switch(toupper(choice))
{
case 'A':
temp= (struct list*)malloc(sizeof(struct list));
printf("Fill-Up the following:\n");
printf("Name:");
fflush(stdin);
gets(temp->name);
printf("Age:");
fflush(stdin);
scanf("%d",&temp->age);
printf("Gender:");
fflush(stdin);
gets(temp->gender);
if(HEAD == NULL)
{
HEAD = temp;
}
else if(HEAD!=NULL)
{
for(trav=HEAD; trav->next != NULL; trav= trav->next);
trav->next=temp;
}
else
{
printf("Not Enough Memory!\n");
}
break;
case 'B':
if(HEAD==NULL)
{
printf("Linked List is Empty!\n");
getch();
break;
}
if(HEAD!=NULL){
for(trav=HEAD; trav != NULL; trav=trav->next )
{
printf("Name: %s\n", trav->name);
printf("Age: %d\n", trav->age);
printf("Gender: %s\n", trav->gender);
getch();
}
}
break;
case 'X':
free(HEAD);
free(trav);
free(temp);
exit(1);
break;
}
}
}
你是這樣初始化temp:
temp= (struct list*)malloc(sizeof(struct list));
但是你永遠不會初始化你的結構的價值。 所以它們含有垃圾。 所有malloc()都會從Heap返回一大塊內存。 您負責其關注和饋送,因此將所有數據成員設置為已知值,例如NULL等。如果您使用調試器,並且在mallloc()賦值后檢查temp的值,則非常明顯(參見圖像)。
因此,外賣是始終初始化malloc結構的數據成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.