Dynamiczna tablica obiektów...
Ostatnio zmodyfikowano 2015-01-27 19:18
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 |
|
Monika90 |
» 2015-01-27 18:11:03 Najpierw trzeba zwolnić starą tablicę, a potem podmienić wskaźnik 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<> |
|
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 :) |
|
« 1 » |