Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Błąd składniowy czy kłopot z Visual Studio?

Jakub17 09 Paź 2016 15:12 579 5
  • #1 09 Paź 2016 15:12
    Jakub17
    Poziom 6  

    Witam. Czy ktoś może mi powiedzieć czy występuje tutaj błąd składniowy? Ponieważ przy próbie kompilacji wywala mi błąd z Microsoft Visual Studio 2010. Piszę kod w Code Blocks. Jeżeli nie ma linijki printf() to jest wszystko ok - zero errorów, zero warrningów.


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Błąd składniowy czy kłopot z Visual Studio?

    Gdy naciskam "Yes" to pojawia się okno dialogowe z informacją że coś nie tak z licencją i żeby reinstalować visuala. Robiłem to i nic.

    0 5
  • #2 09 Paź 2016 15:50
    JacekCz
    Poziom 36  

    Załączone zdjęcie mówi o wyjątku podczas wykonania (i bezproblemowej kompilacji.

    Kod jest ewidentnie niespójny, algorytm poza funkcjami itd...
    Pierwsze sześć linii tego co wklejone to nic tam nie jest poprawnie

    Co innego wokal, co innego gra orkiestra, a jeszcze co innego widać.

    EDIT: Na przyszłość, błędy kompilacji (syntaktyczne czy dowolne inne) to się dokumentuje tutaj nie obrazkami, ale prawy przycisk / Copy - wklej tutaj

    0
  • #4 09 Paź 2016 16:24
    JacekCz
    Poziom 36  

    Na pewno drukując w ten sposób drukujesz adres funkcji x. (może to exception??? jest ta mozliwość)

    Jej zwracanej wartości nigdy nie wykorzystujesz.
    Zwracasz k[i] prawdopodobnie bez sensu (zero albo krzaki)

    Pierwszy argument, ten co kopiuje się do niego, jest źle zaplanowany (jedziesz po pamięci - druga okazja do exception).
    Każda dobra książka to tłumaczy np zw ze strcpy (to ten sam problem)
    Podziałaj z jakimś dobrym wykładem, nie na oślep

    EDIT
    jakbyś miał włączone ostrzeżenia ( i je czytał) to np to drukowanie adresu funkcji raczej by było wychwycone

    0
  • #5 10 Paź 2016 04:23
    LED5W
    Poziom 32  

    Uruchamiaj program w trybie debugowania.

    To co napisałeś w main nie może działać. Po pierwsze tablica do której kopiujesz (k) musi być odpowiednio duża. Po drugie nie może to być (i nie ma to sensu) stała wpisana w argumencie. Resztę opisał JacekCz. Przeanalizuj poniższy kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    JacekCz napisał:
    Na pewno drukując w ten sposób drukujesz adres funkcji x. (może to exception??? jest ta mozliwość)
    W jaki sposób może to powodować wyjątek?

    JacekCz napisał:
    jakbyś miał włączone ostrzeżenia ( i je czytał) to np to drukowanie adresu funkcji raczej by było wychwycone
    U mnie na VS 2010 takiej "akcji" nie wychwytuje.

    0
  • #6 10 Paź 2016 09:06
    JacekCz
    Poziom 36  

    LED5W napisał:

    JacekCz napisał:
    Na pewno drukując w ten sposób drukujesz adres funkcji x. (może to exception??? jest ta mozliwość)
    W jaki sposób może to powodować wyjątek?


    Na moment pisania, wydawało mi się że w jakimś hipotetycznym systemie z ochroną czytania kodu (albo nie von Neumanowskie) może być wyjątek, ale rzeczywiście dobrze mówisz, jest %c, gdyby nawet adres kodu to nie jest jego czytanie, to zwykła liczba.

    LED5W napisał:

    JacekCz napisał:
    jakbyś miał włączone ostrzeżenia ( i je czytał) to np to drukowanie adresu funkcji raczej by było wychwycone
    U mnie na VS 2010 takiej "akcji" nie wychwytuje.


    Któryś kompilator daje warning na użycie samej nazwy funkcji (tj adresu), mogłem coś w głowie pomieszać.
    Na liście funkcji o zmiennych argumentach (głownie xxxprintf xxxscanf) to w ogóle mało co da się sprawdzić, to jeden z wiodących problemów C.

    0