Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[C] - Malloc, tablica struktur

czmiel24 15 Jan 2014 14:03 2844 14
  • #1
    czmiel24
    Level 12  
    Witam
    Mam problem z programem, który tworzy bazę danych. Wkleję tylko kawałek programu, z którym mam problem. Funkcja ma dynamicznie tworzyć, wpisy do bazy danych. Kompilator wyrzuca mi " 'return' : 'baza *' differs in levels of indirection from 'int' ". Bardzo proszę o pomoc.
    Code: c
    Log in, to see the code
  • #2
    Loker
    Level 39  
    Google się popsuło? http://stackoverflow.com/questions/6380981/c-...047-differs-in-levels-of-indirection-from-int

    W skrócie - brak deklaracji funkcji fdodaj(), więc kompilator przyjmuje domyślnie typ zwracany jako int.

    Nie przyglądałem się dokładnie programowi, ale jest kilka innych "ciekawych" rzeczy - np. po co przekazujesz do funkcji fdodaj() parametr "ilosc"? Przekazujesz jako wartość, więc w tym wypadku zawsze będzie równa 0.
  • #3
    czmiel24
    Level 12  
    Proponuje przeczytać mój post, ze zrozumieniem cytuję: "Wkleję tylko kawałek programu". Ale mogę wkleić cały program, zmienna ilość przydaje się by dynamicznie powiększać tablicę.
    Code: c
    Log in, to see the code
  • #4
    the_fifth_horseman
    Level 32  
    Błąd na błędzie.

    Używasz wskaźnika do tablicy bez zainicjalizowania go.
    Code: cpp
    Log in, to see the code


    Tu masz poprawioną i sprawną implementację fdodaj:
    Code: cpp
    Log in, to see the code
  • #5
    czmiel24
    Level 12  
    Działa :), a jeżeli chciałbym użyć malloca, i pomocniczej tablicy temp, to czemu nie działało?
  • #6
    the_fifth_horseman
    Level 32  
    Między innymi dla tego że nowy wpis dodawałeś do oryginalnej tablicy, zapisując go poza zaalokowanym obszarem.
  • #7
    czmiel24
    Level 12  
    No tak, masz rację głupi błąd. Ale pomimo tego nie działa dalej...
    Code: c
    Log in, to see the code
  • #9
    czmiel24
    Level 12  
    Poprawiłem i dalej nie chce się kompilować(Visual Studio 2012), co ciekawe w devie się kompiluje!
  • #10
    the_fifth_horseman
    Level 32  
    Przepisując do temp zawartość tab nadpisujesz dodany element. Dla tego właśnie powinieneś używać wbudowanych funkcji zamiast niepotrzebnego kombinowania.

    W VS kompilujesz to jako kod C czy C++ ? Duża różnica.

    A deva to odłóż gdzie jego miejsce: do muzeum - ostatnio był aktualizowany prawie dekadę temu. Jeżeli zależy ci na czymś podobnym, polecam Code::Blocks.
  • #11
    czmiel24
    Level 12  
    No tak, tylko że to na laborki, więc muszę użyć malloca...
    Tak, ustawiałem żeby się kompilowało jako C.
  • #12
    the_fifth_horseman
    Level 32  
    Jaki dostajesz komunikat o błędzie?
  • #13
    czmiel24
    Level 12  
    [C] - Malloc, tablica struktur
    btw czy jeżeli użyję realloca, to stracę rzeczy które były w poprzedniej pamięci?
  • #14
    the_fifth_horseman
    Level 32  
    czmiel24 wrote:
    [C] - Malloc, tablica struktur
    Komunikaty typu Warning to ostrzeżenia - nie zatrzymują kompilacji (chyba że specjalnie zmienisz ustawienia kompilatora), natomiast typ Error to właściwe błędy uniemożliwiające kompilację. Sprawdź od jakich komunikatów się zaczynają.
    Quote:
    btw czy jeżeli użyję realloca, to stracę rzeczy które były w poprzedniej pamięci?
    Nie, zawartość starego bloku pamięci jest kopiowana.
    Jeżeli realokujesz blok na mniejszy rozmiar niż poprzednio, końcówka starego bloku będzie obcięta. Jeżeli realokujesz blok na większy rozmiar to końcówka nowego bloku będzie zawierać śmieci (możesz skorzystać z memset() aby ją wyzerować)
    http://www.cplusplus.com/reference/cstdlib/realloc/
  • #15
    czmiel24
    Level 12  
    Już wszystko działa, ale w... Devie :( nie wiem czemu w VS w pewnym momencie dopisywałem coś do programu, a ten się zachowywał tak jak bym tego nie dopisał. W końcu usunąłem cały kod, i działał tak jak wcześniej!
    Dokończyłem program w Devie, skopiowałem kod, wrzuciłem do VS i wyskoczył mi błąd " Nie można znaleźć określonego pliku main.exe ". Co może być powodem?