problem z kompilacją na linuksie (malloc baza danych)

0

Witam!!!
Napisałem baze danych w c do obsługi biblioteki(projekt na zaliczenie).
Wszystko na windowsie działa lecz po kompilacji gcc w linuksie dostaje następujacy błąd..

baza.c: In function ‘Dodaj’:
baza.c warning: incompatible implicit declaration of built-in function ‘malloc’

oczywiście stdlib dodany.
Poniżej kod programu:

#include <stdio.h>

#include <string.h>



typedef struct elementy        //deklaracja struktury o nazwie "elementy"

{

 int liczba_stron, rok_wydania, nr_wydania;  //deklaracja zmiennych

 char autor[20];

 char tytul[20];

 char wydawnictwo[20];       

 

 struct elementy *nastepnik;      //wkaznik do struktury - nastepnik rekordu

 struct elementy *poprzednik;     //wkaznik do struktury - poprzednik rekordu

} rekord;



rekord *glowa;          //glowa listy dwukierunkowej

rekord *ogon;          //ogon listy dwukierunkowej



Dodaj()

{

 int liczba_stron, rok_wydania, nr_wydania;  //deklaracja zmiennych ze struktury

 char autor[20], tytul[20], wydawnictwo[20];

 

 rekord *nowy;         //deklaracja wskaznika "nowy"

 nowy=(rekord*)malloc(sizeof(rekord));   //przydzielenie pamieci o wielkosci "rekord" do wskaznika

 

 printf("Podaj autora: ");

  getchar();

  gets(nowy->autor);       //wczytanie zmiennych z klawiatury

 printf("Podaj tytul: ");  

  gets(nowy->tytul);      

 printf("Podaj wydawnictwo: ");

  gets(nowy->wydawnictwo);    

 printf("Podaj liczbe stron: ");

  while (scanf("%d",&nowy->liczba_stron)!=1 || nowy->liczba_stron<0 )  //zabezpieczenie przed podaniem nieprawidlowych danych wejsciowych

  {

   printf("Nieprawidlowe dane wejsciowe! Sprawdz liczbe stron. Sprobuj ponownie.\n");

   fflush(stdin);

  }

 printf("Podaj rok wydania: ");

  while (scanf("%d",&nowy->rok_wydania)!=1 || nowy->rok_wydania>2009 || nowy->rok_wydania<0)

  {

   printf("Nieprawidlowe dane wejsciowe! Sprawdz rok wydania. Sprobuj ponownie.\n");

   fflush(stdin);

  }

 printf("Podaj numer wydania: ");

  while (scanf("%d",&nowy->nr_wydania)!=1)

  {

   printf("Nieprawidlowe dane wejsciowe! Sprobuj ponownie.\n");

   fflush(stdin);

  }



 rekord *wsk;       

 wsk = (rekord*)malloc(sizeof(rekord)); 

 wsk = ogon;



 rekord *wsk2;       

 wsk2 = (rekord*)malloc(sizeof(rekord));



 while(wsk->nastepnik != NULL)      //wskaznik "wsk" wskazuje na ostatni rekord listy

 {

 wsk = wsk->nastepnik;

 }



 wsk2 = wsk->poprzednik;       //przesuniecie nowo utworzonego rekordu na koniec listy

 wsk->poprzednik = nowy;

 nowy->nastepnik = wsk;

 wsk2->nastepnik = nowy;

 nowy->poprzednik = wsk2;

 printf("Nowy rekord zostal dodany.\n");

}



Podglad()

{

   rekord *wsk;          //deklaracja wskaznika

   wsk=(rekord *)malloc(sizeof(rekord));

   wsk=glowa->nastepnik;       //wskaznik "wsk" wskazuje na nastepnik glowy listy



   int n=1;

   printf("  |\tAutor\t\t|\tTytul\t\t|\tWydawnictwo    | Liczba stron | Rok wydania |   Nr Wydania   |\n");

   printf("----------------------------------------------------------------------------------------------------------------------\n");

   while(wsk->nastepnik != NULL)      //wyswietlanie rekordow

   {

      printf("%d | %-20s | %-20s | %-20s | %-12d | %-11d | %-14d |\n", n, wsk->autor, wsk->tytul, wsk->wydawnictwo, wsk->liczba_stron, wsk->rok_wydania, wsk->nr_wydania);

      wsk=wsk->nastepnik;

      n++;

   }

}



Usun()

{



 rekord *wsk;

 wsk = (rekord*)malloc(sizeof(rekord));

 wsk = glowa->nastepnik;

 int d=0, n, m;



 while(wsk->nastepnik != NULL)      //liczenie rekordow

 {

  wsk=wsk->nastepnik;

  d++;

 }

 

 if(d==0)           //zabezpieczenie przed podaniem nieprawidlowych danych wejsciowych

 {

  printf("Baza rekordow jest pusta.\n");

  return;

 }

 

 printf("Ktory rekord chcesz usunac ?\n");

 getchar();

 while(scanf("%d", &n)!=1 || n>d)

 {

   printf("Blad! Nieprawidlowe dane wejsciowe lub Nie ma takiego rekordu.\n");

   fflush(stdin);

 }

 

 wsk=glowa->nastepnik;

 for(m=1; m<n; m++)

  {

   wsk = wsk->nastepnik;

  }

 (wsk->poprzednik)->nastepnik = wsk->nastepnik;  //nastepnikiem poprzednika rekordu do usuniecia staje sie nastepnik tego rekordu

 (wsk->nastepnik)->poprzednik = wsk->poprzednik;  //poprzednikiem nastepnika rekordu do usuniecia staje sie poprzednik tego rekordu

 free(wsk);           //zwolnienie obszaru pamieci

 printf("Rekord %d zostal usuniety.\n", n);

 

}



Edytuj()

{

 int liczba_stron, rok_wydania, nr_wydania;

 char autor[20], tytul[20], wydawnictwo[20];

 

 rekord *wsk;

 wsk = (rekord*)malloc(sizeof(rekord));

 wsk = glowa->nastepnik;

 int d=0, n, m;



 while(wsk->nastepnik != NULL)

 {

  wsk=wsk->nastepnik;

  d++;

 }

 if(d==0)

 {

  printf("Baza rekordow jest pusta.\n");

  return;

 }

 

 printf("Ktory rekord chcesz edytowac ?: ");    //wybor rekordu do edytowania

 while(scanf("%d", &n)!=1 || n>d || n<0)

 {

   printf("Blad! Nieprawidlowe dane wejsciowe lub Nie ma takiego rekordu.\n");

   fflush(stdin);

 }

 

 wsk=glowa->nastepnik;

 for(m=1; m<n; m++)

  {

   wsk = wsk->nastepnik;

  }

 

 printf("Ktore pole chcesz edytowac ?:\n");   //wybor pola do edytowania

 printf("0- Anuluj\n1- Autor\n2- Tytul\n3- Wydawnictwo\n4- Liczba stron\n5- Rok wydania\n6- Nr wydania\n");

 

 int i;

 while(scanf("%d", &i)!=1 || i>6 || i<0)

 {

   printf("Blad! Nieprawidlowe dane wejsciowe lub Nie ma takiej opcji.\n");

   fflush(stdin);

 }



 switch(i)          

 {

  case 0: return;

  case 1:

  {

   printf("Podaj autora: ");

   getchar();

   gets(wsk->autor);

   break;

  }

  case 2:

  {

   printf("Podaj tytul: ");

   getchar();

   gets(wsk->tytul);

   break;

  }

  case 3:

  {

   printf("Podaj wydawnictwo: ");

   getchar();

   gets(wsk->wydawnictwo);

   break;

  }

  case 4:

  {

   printf("Podaj liczbe stron: ");

   while (scanf("%d",&liczba_stron)!=1 || liczba_stron<0 )

   {

    printf("Nieprawidlowe dane wejsciowe! Sprawdz liczbe stron. Sprobuj ponownie.\n");

    fflush(stdin);

   }

   wsk->liczba_stron = liczba_stron;

   break;

  }

  case 5:

  {

   printf("Podaj rok wydania: ");

   while (scanf("%d",&rok_wydania)!=1 || rok_wydania>2009 || rok_wydania<0)

   {

    printf("Nieprawidlowe dane wejsciowe! Sprawdz rok wydania. Sprobuj ponownie.\n");

    fflush(stdin);

   }

   wsk->rok_wydania = rok_wydania;

   break;

  }

  case 6:

  {

   printf("Podaj numer wydania: ");

   while (scanf("%d",&nr_wydania)!=1)

   {

    printf("Nieprawidlowe dane wejsciowe! Sprobuj ponownie.\n");

    fflush(stdin);

   }

   wsk->nr_wydania = nr_wydania;

   break;

  }

 }

 printf("Pole zostalo zmienione.\n");

}

 

Odczyt()

{

 FILE *plik;

 plik = fopen("dane.txt", "r");      //otwieranie pliku "dane.txt"

 if(plik==NULL)

 {

  printf("Blad! - nie ma takiego pliku\n\n");

  return;

    }

 

    else

 {

        while(feof(plik)==0)        //dopoki nie jest to koniec pliku wykonuj petle

  {

            rekord *wsk;        //deklaracja wskaznikow

            wsk = (rekord *)malloc(sizeof(rekord));



            rekord *bufor;

            bufor = (rekord *)malloc(sizeof(rekord));

 

   rekord *nowy;

            nowy = (rekord*)malloc(sizeof(rekord));



            fscanf(plik, "%s", &nowy->autor);   //czytanie poszczegolnych elementow z pliku

            fscanf(plik, "%s", &nowy->tytul);

            fscanf(plik, "%s", &nowy->wydawnictwo);

   fscanf(plik, "%d", &nowy->liczba_stron);

   fscanf(plik, "%d", &nowy->rok_wydania);

   fscanf(plik, "%d", &nowy->nr_wydania);



            if(feof(plik)==0)       

   {

    wsk=ogon;

    while(wsk->nastepnik != NULL)

    {

     wsk = wsk->nastepnik;

    }



    bufor=wsk->poprzednik;      //przesuwanie wczytanego rekordu na koniec listy

    wsk->poprzednik = nowy;

    nowy->nastepnik = wsk;

    bufor->nastepnik = nowy;

    nowy->poprzednik = bufor;

   }

        }

    }

   fclose(plik);

   printf("Plik zostal odczytany.\n");

}

 

Zapisz()

{

 FILE *plik;

 plik = fopen("dane.txt", "w");      //otwieranie pliku "dane.txt"

 

        rekord *wsk;

        wsk = (rekord *)malloc(sizeof(rekord));

        wsk = glowa->nastepnik;



  while(wsk->nastepnik != NULL)      //kazdy rekord zostaje zapisany od nowej linii

  {

   fprintf(plik, "%s ", wsk->autor);   //zapisywanie poszczegolnych elementow rekordu

   fprintf(plik, "%s ", wsk->tytul);

   fprintf(plik, "%s ", wsk->wydawnictwo);

   fprintf(plik, "%d ", wsk->liczba_stron);

   fprintf(plik, "%d ", wsk->rok_wydania);

   fprintf(plik, "%d\n", wsk->nr_wydania);

   wsk = wsk->nastepnik;

  } 

  printf("Zapisywanie zakonczone.\n");

 fclose(plik);

}



Sortuj()

{

 

 int i, j, n=0, opcja, d=0;

 rekord *wsk;

    wsk = (rekord*)malloc(sizeof(rekord));

 rekord *bufor;

 bufor = (rekord*)malloc(sizeof(rekord));

 

 wsk=glowa->nastepnik;

 

 while(wsk->nastepnik != NULL)    //liczenie rekordow

 {

  wsk=wsk->nastepnik;

  n++;

 }



 if(n==0)

 {

  printf("Baza rekordow jest pusta.\n");

  return;

 }

 

 /*printf("Wybierz pole sortowania:\n");

 printf("0- Wstecz\n1- Autor\n2- Tytul\n3- Wydawnictwo\n4- Liczba stron\n5- Rok wydania\n6- Numer wydania\n");

 while(scanf("%d", &opcja)!=1 || opcja>n || opcja<0)

 {

   printf("Blad! Nieprawidlowe dane wejsciowe lub Nie ma takiej opcji. Sprobuj ponownie.\n");

   fflush(stdin);

 }

 

 switch(opcja)

 {

  case 0: return;

  case 1:

  case 2:

  case 3:

  case 4:

  case 5:

  case 6:

 }*/

 

 

   for(j=1; j<=(n-1); j++)    //algorytm sortowania babelkowego

   {

    wsk = glowa->nastepnik;

    for(i=1 ; i<=(n-1); i++)

    {

     if((wsk->nastepnik != NULL) && (strcmp(wsk->wydawnictwo, (wsk->nastepnik)->wydawnictwo)<0))

     {

      wsk = wsk->nastepnik;

     }

     else

     {

     memcpy(bufor, wsk->nastepnik, 70);

     memcpy(wsk->nastepnik, wsk, 70);

     memcpy(wsk, bufor, 70);

     wsk = wsk->nastepnik;

     }

    }

   }

 printf("Sortowanie zakonczone.\n");

} 

 

Czyszczenie_bazy()

{

 glowa = (rekord* )malloc(sizeof(rekord));

 ogon = (rekord* )malloc(sizeof(rekord));

 glowa->nastepnik = ogon;

 glowa->poprzednik = NULL;

 ogon->nastepnik = NULL;

 ogon->poprzednik = glowa ;

 printf("Baza rekordow zostala wyczyszczona.\n");

}



main()

{

 glowa = (rekord* )malloc(sizeof(rekord));   //zerowanie bazy rekordow

 ogon = (rekord* )malloc(sizeof(rekord));

 glowa->nastepnik = ogon;

 glowa->poprzednik = NULL;

 ogon->nastepnik = NULL;

 ogon->poprzednik = glowa ;



 int i;            //wyswietlanie MENU

 system("clear");

 printf("================================================================================================\n");

 printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

 printf("================================================================================================\n");



 do

 {

  printf("Wybierz opcje z MENU: ");

  while (scanf("%d",&i)!=1)

  {

   printf("Nieprawidlowe dane wejsciowe! Sprobuj ponownie.\n");

   fflush(stdin);

  }



  switch(i)

  {

   case 1:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Dodaj();

    break;

   }

   case 2:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Podglad();

    break;

   }

   case 3:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Podglad();

    Usun();

    break;

   }

   case 4:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Podglad();

    Edytuj();

    break;

   } 

   case 5:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Odczyt();

    break;

   }

   case 6:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Zapisz();

    break;

   }

   case 7:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Sortuj();

    break;

   }

   case 8:

   {

    system("clear");

    printf("================================================================================================\n");

    printf("|MENU|1.Dodaj |2.Podglad |3.Usun |4.Edytuj |5.Odczyt |6.Zapisz |7.Sortuj |8.Czysc baze |9.Wyjdz |\n");

    printf("================================================================================================\n");

    Czyszczenie_bazy();

    break;

   }

   case 9:

   {

   i=-1;

   }

  }

 }

 while(i>=0);

 system("clear");

 return 0;

}



 

z góry dzieki za pomoc :)

0

Czytać umie? Angielski się zna? A jak nie to nie ma się co porywać na programowanie.
http://translate.google.pl/translate_t?q=warning#auto|pl|warning

0
#include <stdlib.h>

1 użytkowników online, w tym zalogowanych: 0, gości: 1