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++]Alokacja pamieci dynamicznej

sejtan 23 May 2005 20:39 1969 5
  • #1
    sejtan
    Level 11  
    Witam,
    mam napisany dosc prosty program - baze danych :)
    Zrobiona na tablicach i ograniczona
    Code:

    const int MAX=256;


    Problem pojawia sie gdy chce zniesc to ograniczenie
    poslugujac sie w cpp new/delete


    poczatek programu glownego

    Code:

    void main(void)
    {
       int i, z=0;
       char temp[MAX];
       // zerowanie tablic
       for (i=0; i<MAX; i++)
           {
           imie[i][0] = NULL;
           nazwisko[i][0] = NULL;
           tel[i][0] = NULL;
           }

       Load();



       //sprawdzanie pamieci
       for (i=0; i<MAX; i++)
           if (imie[i][0] != NULL) z++;
       do { ... } // program glowny


    totalnie nie wiem jak przypisac tutaj pamiec dynamiczna
    przykladowo by wielkosc pamieci wynosila z+1 ,
    czyli ilosc rekordow w bazie +1.

    probowalem

    Code:

    MAX=z+1;
    size = new int*[MAX];



    ale niestety konczy sie to bledem o warotsci const dla tablice :/
    ma ktos jakis pomysl?
  • #2
    fantom
    Level 31  
    Moze jakis listing bledow bys dal ? Nie kompiluje sie czy po prostu zle dziala ? A jakiego typu jest size bo nie widze deklaracji ? Poza tym jak chcesz pisac w C++ to moze bys jakas klase stworzyl co ?
  • #3
    sejtan
    Level 11  
    no wiec napisalem ze blad to iz musi byc wartosc const dla tablicy ( dla nie wtajemniczonych chodzi glownie o tablice imie )

    size pewnie bedzie int skoto wskaznik jest int

    a po co mi od razu klasy?
  • #4
    fantom
    Level 31  
    sejtan wrote:
    no wiec napisalem ze blad to iz musi byc wartosc const dla tablicy ( dla nie wtajemniczonych chodzi glownie o tablice imie )

    Byc moze musi byc const ale wydaje mi sie ze blad jest gdzie indziej.Sprobuj skastowac na const.
    Quote:

    size pewnie bedzie int skoto wskaznik jest int

    Pewnie nie bo powinno byc typu int**
    Quote:

    a po co mi od razu klasy?

    Albo uzywasz C++ ze wszystkimi tego konsekwencjami albo nie zawracaj sobie glowy i skorzystaj z zestawu funkcji malloc(), realloc() ze standardowej biblioteki libc.

    Jak chcesz alokowac tablice dwuwymiarowa to sie robi tak:

    Code:

    int** size;
    size = new int*[X];
    for(i=0;i<X;i++)
    size[i] = new int[Y];
  • #5
    monsinior
    Level 16  
    Błąd jest w lini
    Code:

    MAX=z+1;


    Przecież sam na początku zadeklarowałeś że MAX jest const wiec kompilator nie pozwoli Ci zmienić wartościi MAX.

    Spróbuj napisać
    Code:

    size = new int*[z+1];


    I tak jak napisał fantom może byś dał listing błędów,bo my jasnowidzami nie jesteśmy nie wiemy jakie błędy wywala Ci kompilator.
  • #6
    stepowicz
    Level 17  
    Może użyjesz kontenera vector z STL (Standardowa biblioteka wzorców), problem dynamicznej alokacji bedziesz miał z głowy.
    #include <vector>
    using namespace std;
    int main() {
    vector <twoj typ> baza;
    baza.push_back(twoj_obiekt);
    itd...
    }