簡體   English   中英

C編程中的鏈表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM