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.

Tablica dwuwymiarowa alokowana dynamicznie. Nie moge wykryc znaku.

aest 20 Maj 2011 11:23 2306 2
  • #1 20 Maj 2011 11:23
    aest
    Poziom 8  

    Witam. Mam problem z prostym programem w ktorym kolko poruszalo by sie od gory do dolu po tablicy. Granice sa oznaczone przez znak '*'. Kolko zaczyna ruch z dolnego lewego rogu po natrafieniu na gorna granice powinno zmienic kolumna na o jedna w prawo i potem jechac w dol etc. Niestety kolko zmienia swoja kolumne o wiele, wiele za wczesnie. Mysle ze problem lezy w funkcji collision odpowiedzialnej za wykrycie kolizji, ale nie wiem gdzie dokladnie.






    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0 2
  • #2 25 Maj 2011 23:18
    kubsztal
    Poziom 10  

    Tak wygląda kawałek pamięci, na który wskazują wskaźniki w tablicy "field":
    Tablica dwuwymiarowa alokowana dynamicznie. Nie moge wykryc znaku.
    Na czerwono masz zaznaczone znaki '*' (0x2a). W funkcji "collision" zaczynasz od sprawdzenia adresu 0x0039c8bb (zielone kółko), potem sprawdzasz 0x0039c8ba (niebieskie kółko) i za trzecim razem sprawdzasz 0x0039c8b9 (czerwone kółko) wykrywając '*'. Jeśli wskaźniki w "field" wskazują poprawnie te adresy pamięci, o które Ci chodzi, to masz rację - musisz poprawić wykrywanie kolizji. W przeciwnym razie popraw alokowanie.

    0
  • #3 25 Maj 2011 23:27
    azra
    Poziom 16  

    Tak na marginesie:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Coś mi nie pasuje w zwalnianiu... Czyżbyś zwalniał N-ty element field, gdzie N to ilość wszystkich elementów? Nie wydaje Ci się, że ta pętla jest troszkę... Jałowa?

    No i w C++ używasz malloc? Jakiś konkretny powód? ;)
    sizeof(char) zawsze zwróci jeden, więc możesz sobie mnożenie przez niego podarować, zajmuje tylko miejsce w pliku źródłowym. :P

    Wybacz, ale nie bardzo mam ochotę na głębsze zapoznanie się z tym kodem, głównie przez bardzo chaotyczne, wręcz niechlujne formatowanie.

    0