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.

Tablica struktur, kopiec. Dlaczego wyskakuje błąd?

lukullus87 30 Nov 2009 20:28 1326 3
  • #1
    lukullus87
    Level 11  
    Witam,
    pisze sobie program w C++ i mam pewien problem, mianowicie mam strukture:

    Code:
     struct pole{
    
             int r,p,q,nr;
          };

    nastepnie definuje sobie zmienna:



    Code:
    pole kopiec[20];

    następnie pod do tej tablicy wpisuje sobie jakies dane typu int i teraz chce zrobic
    strukture taka:

    Code:
     struct Nadrz_dane{
    
           pole wezel[];
           int MAX;
         };

    i mam zmienna typu Nadrz_dane drzewo i chce podpisac
    drzewo[1].wezel=kopiec;
    Wyskakuje blad, jezeli zmieniam wymiar zmiennej typu Nadrz_dane na drzewo.wezel[20] i proboje podpisac cala tablice wyskakuje takze blad. Wie ktos jak podpisac ta jedna tablice pod druga? Z góry dziekuje :)

    pozdro

    Kod proszę umieszczać w znacznikach code. Temat poprawiłem - krzychoocpp
  • Helpful post
    #2
    Ballbreaker
    Level 12  
    Widzę, że dobrze rozumujesz, że nazwa tablicy jest wskaźnikiem do jej pierwszego elementu o numerze 0.
    Jednakże wkrada Ci się błąd w miejscu przypisania

    Code:
    drzewo[1].wezel=kopiec;


    A to dlatego, że nazwa tablicy jest wskaźnikiem stałym i nie zmienisz adreu na który pokazuje. Jeżeli zmienisz definicję węzła na:

    Code:
    pole *wezel;


    to potem możesz go sobie ustawiać na dowolny adres w pamięci.

    Mam tylko zasadnicze pytanie:
    Po co wskaźnik ma pokazywać na coś co już istnieje i to jak dobrze rozumiem, statycznie czyli przez cały czas działania programu i jest dostępne w każdym miejscu w tym pliku źródłowym ?



    Pozdrawiam
  • #3
    lukullus87
    Level 11  
    Bardzo dziekuje za pomoc, a w moim problemie chodzi o to, ze chce zrobic jakby strukture, ktora jest ma byc domyslnie kopcem i ktora zawiera tablice struktur typu pole.
  • Helpful post
    #4
    Ballbreaker
    Level 12  
    Jeśli chcesz to zrobić w strukturze, która pojawia się gdzieś w programie i miec wpływ na wielkość tablicy w każdym egzemplarzu struktury, eleganckim rozwiązaniem jest dynamiczne przydzielenie pamięci.

    Code:
    struct pole{
    
    int r,p,q,nr;
    };

    struct Nadrz_dane{
    pole *wezel;
    int MAX;
    };

    main()
    {
      Nadrz_dane drzewo;
      int liczba_pol = 20;

      drzewo.wezel = (pole*) malloc(liczba_pol * sizeof(pole));
      if ( NULL ==  drzewo.wezel )
      {
        // blad alokacji
        return 0;
      }

      // a potem jak z normalna tablica:
      drzewo.wezel[0] = { 1, 2, 3, 4};
      drzewo.wezel[1] = { 3, 4, 5, 6};

      // ...
      // a na koncu zwalniamy pamiec

      free(drzewo.wezel);
    }


    BTW, kod jest w C, a nie w C++. Do tego to jeszcze trochę musisz się pouczyć o tym jak zarządzana jest pamięć, bo C++ potrafi zrobić takie sztuczki, że bez wiedzy jak sięto robi w czystym C łatwo się pogubisz.

    Pozdrawiam