链接列表和C上的Struct

时间:2014-12-14 10:17:33

标签: c struct linked-list

我正在尝试使用链接列表制作库存程序,但是当我想显示我输入的数据列表时,我遇到了问题。 这是输入数据的代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct t_barang
{
   char kode[9];
   char nama[30];
   int  harga;
   int  stok;
};

struct l_barang
{
   struct t_barang item;
   struct l_barang *next;
};

int main(){
    typedef struct l_barang *p_barang;
    struct l_barang *head;
    head=NULL;
    int jumlah=0;
    do{
        printf("Input Jumlah barang = ");
        scanf("%d", &jumlah);
        if(jumlah == 0)
            break;
        else{
            struct l_barang *baru = (struct l_barang*) malloc(sizeof(struct l_barang));
            printf("Input Kode barang = ");
            scanf("%s", &(baru->item).kode);
            printf("Input nama barang = ");
            scanf("%s", &(baru->item).nama);
            printf("Input harga barang = ");
            scanf("%d", &(baru->item).harga);
            baru->item.stok=jumlah;
            if(head == NULL){
                baru->next=NULL;
                    head=baru;}
            else{
                struct l_barang *tail;
                    tail=head;
                        while(tail->next != NULL){
                tail->next=NULL;
                tail = baru;
                }
            }
        }
    }
    while(jumlah != 0);

这是我用来显示数据的代码:

p_barang tampil = head;
    while(tampil){
        printf("%d\t%s\t%s\t%d\n",tampil->item.stok, tampil->item.kode, tampil->item.nama, tampil->item.harga);
    tampil=tampil->next;}
谢谢你!

1 个答案:

答案 0 :(得分:1)

问题可能来自这里:

            tail=head;
            while(tail->next != NULL){
              tail->next=NULL;
              tail = baru;
            }

如果tail->next不为NULL,则将其设置为NULL,然后更改tail:这将触发内存泄漏和其他问题......

通常的方法是:

            tail=head;
            while(tail->next != NULL){
              tail=tail->next;
            }
            //tail is now the end of the list

            tail->next = baru;
            baru->next=NULL;
            //now, baru is the end of the list