dynamiczna tablica - problem

0

Witam!
Prosze o poprawienie błędów w poniższym kodzie. Nie działa mi dopisywanie liczby na końcu tablicy i usuwanie wybranego elementu. Program dopisuje mi element i usuwa ale przy okazji zmienia wartości pozostałych elementów tablicy.
Z góry dziękuje za pomoc :)

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char argv[])
{
double
t;
int a;
do{
cout<<endl<<"MENU:"<<endl;
cout<<"1 - zadeklaru rozmiar tablicy"<<endl;
cout<<"2 - wyswietl tablice"<<endl;
cout<<"3 - dopisz nowa liczbe na koncu tablicy"<<endl;
cout<<"4 - usun wybrany element z tablicy"<<endl;
cout<<"5 - koniec"<<endl;
cin>>a;

        switch(a)
        {
                 case 1:
                      
                 int rozmiar;
                 
                 cout<<"Podaj rozmiar tablicy: ";
                 cin>>rozmiar;
                 t=new double[rozmiar];

                 for(int i=0; i<rozmiar; i++)
                 t[i]=1;
                 
                 

                 break;


                 case 2:
                 
                 for(int i=0; i<rozmiar; i++)
                 cout<<endl<<"tablica ["<<i+1<<"]= "<<t[i];
                
                 break;
                 
                 
                 
                 case 3:
                      int b;
                 cout<<"Podaj wartosc nowej liczby? ";
                 cin>>b;
                 rozmiar=rozmiar+1;
                 t=new double[rozmiar];
                 t[rozmiar-1]=b;
                 
                        

                 break;
                 
                 case 4:
                 int c,j;
                 j=0;
                 cout<<"Ktory element chcesz usunac? ";
                 cin>>c;
                 rozmiar--;
                 double* nt;
                 nt= new double[rozmiar];
                 for(int i=0; i<c; i++)
                 if(t[i]!=t[c])
                 {
                 nt[j]=t[i];
                 j++;
                 }
                 delete[]t;
                 t=nt;
                 delete[]nt;
                
                
                 break;
                 case 5:
                 break;
                      


        }
        }while(a!=5);
        

delete[]t;

cin.ignore();
getchar();

}

0

Po pierwsze, jak myślisz co te linijki robią?

rozmiar=rozmiar+1;
t=new double[rozmiar];
t[rozmiar-1]=b;

Ustawiasz nowy rozmiar tablicy, tworzysz nową tablicę i przypisujesz jej adres do wskaźnika t.
Szkoda tylko, że sobie nigdzie nie zapamiętujesz tego co było w tamtej tablicy wcześniejszej, gubisz jej adres na zawsze (wycieki pamięci) i nie kopiujesz poprzednich wartości do nowej tablicy.

W usuwaniu masz ten sam problem. Tworzysz nową tablicę z innym rozmiarem, ale nigdzie nie kopiujesz tych wartości do nowej tablicy.
Poza tym:

delete[]t;
t=nt;
delete[]nt;

Co to robi? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1