Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamiczna tablica obiektów...

Ostatnio zmodyfikowano 2015-01-27 19:18
Autor Wiadomość
Chev_Chelios
Temat założony przez niniejszego użytkownika
Dynamiczna tablica obiektów...
» 2015-01-27 17:13:11
Witam,
z programowaniem dopiero zaczynam swoje podboje więc proszę z góry nie krzyczeć ze coś zrobiłem źle bo wiem że tak jest :)

Mam problem z alokacja tablicy obiektów którą tworze dynamicznie (ilość obiektów jest zwiększana wraz z odczytem kolejnej danej z pliku) wszystko niby działa jak należy ale sa (jak to sie fachowo nazywa) wycieki pamięci :)

Oto co stworzyłem:


Produkt *produkty; //tablica produktow

int czytajProdukty() //czytanie produktow z pliku, jezeli blad zwraca 0 inaczej zwraca liczbe wczytanych produktow
{

int i = 0; // licznik produktow

...
Produkt *prod_temp; //tablica zapasowa produktow
prod_temp = new Produkt[i];

//produkty = new Produkt[i+1];
for (int j=1; j<i; ++j)    //przepisuje stara tablice do nowej
{
prod_temp[j] = produkty[j];
}

produkty = prod_temp;
//delete [] prod_temp;
...
   tutaj operacje na pliku
...
                na koncu poproastu przypisuje wartosci do obiektu za pomoca funkcji

produkty[i].Ustaw(temp_nazwa, atoi(temp_ilosc), atof(temp_cena));


Problem jest w sumie cząstkowy bo program działa jak należny tylko że jest jedno ale, nie zawszem tzn czasami wszystko dziala jak nalezy a czasami wysypuje sie przy odczytaniu kolejnej danej.
Wiem ze sa tutaj ludzie którzy wiedza więcej odemnie wiec prosze o sugestie, porady i ew rozwiazanie problemu...
PS.
Nie mogę tez zwolnic pamięci np z utworzonej tymczasowo tablicy, moze ktos powiedziec czemu?
Dodam również ze przy kompilacji nie ma żadnych błędów
P-125621
Monika90
» 2015-01-27 18:11:03
Najpierw trzeba zwolnić starą tablicę, a potem podmienić wskaźnik
C/C++
delete[] produkty;
produkty = prod_temp;



for (int j=1; j<i; ++j)    //przepisuje stara tablice do nowej
Jesteś pewien że zakres zmiennej j jest dobry?

A tak w ogóle, to nalezy użyć std::vector<>
P-125623
Chev_Chelios
Temat założony przez niniejszego użytkownika
» 2015-01-27 19:18:17
Masz racje monika, juz sobie poradziłem ale dziekuje za odpowiedz, vektor nie uzyje bo mam narzucone użycie operatora new :)
P-125629
« 1 »
  Strona 1 z 1