Hej,
piszę program liczący złożoność obliczeniową operacji na tablicach. Wszystko fajnie, ale do momentu, kiedy program będzie tylko robił dwie operacje na raz, a chciałbym, żeby liczył mi wszystko.
Już tłumaczę.
mam kilka funkcji, które liczą czas dodawania na początek, na koniec i gdzieś w środek tablicy.
Poza tym, wcześniej program wczytuje tablicę z pliku.
Tyle słowem wstępu, bo wklejanie całości kodu nie ma sensu
//gdzieś w środku programu
srand( time( NULL ) );
for (int i=0;i<10000;i++){
double t = T.stworz_plik(nazwa_pliku);
stworz<<t<<endl; //stworz to nazwa pliku
stworz.flush();
double t1 = T.dodaj(0,losuj(b,c));
dodajP<<t1<<endl; //dodajP to nazwa pliku
dodajP.flush();
double t2 = T.dodaj(d,losuj(b,c));
dodajK<<t2<<endl; //dodajK to nazwa pliku
dodajK.flush();
int indeks = (rand()%T.getwielkosc()); //Tutaj program losuje mi kilka razy tą samą wartość, później znowu kilka razy inną, dlaczego?
double t3 = T.dodaj(indeks, losuj(b,c));
dodajL<<t3<<endl; //dodajL to nazwa pliku
dodajL.flush();
}
//gdzieśtam dalej jest zamknięcie plików
Jeśli zakomentuję dwie z trzech akcji dodawania do tablicy (bez znaczenia jakie), to wszystko będzie śmigać.
Program się kompiluje, ale dotarłem do miejsca wysypywania się, jest to zwalnianie tablicy pomocniczej.
Nie mam zielonego pojęcia, dlaczego operacja delete nie działa, jak należy.
//w klasie tablicy
double tablica::dodaj(int indeks, int unsigned wartosc){
if (indeks<=wielkosc){
Czas.start();
wielkosc++;
int unsigned *tabpom = new int unsigned[wielkosc];
for (int i=0;i<indeks;i++)
tabpom[i]=tab[i];
for (int i=indeks;i<wielkosc;i++)
tabpom[i+1]=tab[i];
tabpom[indeks]=wartosc;
delete[] tab;
stworz(wielkosc);
for (int i=0;i<wielkosc;i++)
tab[i]=tabpom[i];
delete[] tabpom; //Tutaj program się wywala
Czas.stop();
}
else
cout<<"BLAD - indeks poza zakresem"<<endl;
return Czas.wynik();
}
Bardzo Was proszę o pomoc, bo utknąłem w martwym punkcje - zarówno w przypadku zwalniania pamięci, jak i złego losowania.
Pozdrawiam serdecznie
mrozo