C++ dynamiczne alokowanie pamieci

0

Witam
mam problem z kodem który jest czescia pewnej klasy. Domyślam sie ze powinienem w odpowiednich miejscach dodac delete[]... ale program wypisuje wieksze głupoty. Głównym zadaniem kodu jest wczytywanie imienia i nazwiska i zapisywanie danych do dopasowanych tablic, i problem polega na tym ze wyrazy do 7 znaków są normalnie wczytywane i wypisywane, od 8 do 12 tablica niezaleznie od wpisanego imienia ma dlugosc 12. wiecej niz 12 jest juz ok. Ktos moze wyjasnic co w tym programie sie dzieje?
Ew. czy jest jakis sposób by to działanie zrobic inaczej?

  
char *imie, *nazwisko, *imie2, *nazwisko2;
     int i=0;
     cout<<"Podaj imie ";
     fflush(stdin);

     imie=new char;
     imie2=new char;

     char znak=NULL;
     for( i=0;znak!='\n';i++)
     {
         scanf("%c", &znak);
         if(znak!='\n')                      //sprawdzenie czy uzytkownik skonczyl pisac
         {
         imie[i]=znak;
         imie2=imie;

         imie=new char [i+1];
         imie=imie2;

         imie2=new char [i+1];


         }
     }
     cout<<imie;                              // wypisz imie
      
     Imie(imie);                                //tablica imie zostaje przekazana do funkcji imie
     
     char znak2=NULL;
     fflush(stdin);
     nazwisko=new char[1];
     nazwisko2=new char[1];
     cout<<"Podaj nazwisko ";
     for( i=0; znak2!='\n' ;i++)
     {
         scanf("%c", &znak2);
         if(znak2!='\n')
         {

         nazwisko[i]=znak2;
         nazwisko2=nazwisko;
         nazwisko=new char [i+2];
         nazwisko=nazwisko2;
         nazwisko2=new char [i+2];

         }
     }
     cout<<nazwisko;

     Nazwisko(nazwisko);
1

Przeczytaj jeszcze raz rozdziały kursu o tablicy znaków, c-stringach i dynamicznej alokacji pamięci, bo ten kod nadaje się tylko do skasowania.

imie=new char;

imie to jeden znak

imie[i]=znak;

jeden znak na pewno nie powinien mieć indeksów

imie=new char [i+1];
imie=imie2;

2 wycieki pamięci, C-stringów nie można przypisać w ten sposób.

No i ogólnie wycieki pamięci przy prawie każdej linijce kodu.

0
 imie=new char;

Wiesz, że powyższe rezerwuje 1 element typu char, czyli 1 bajt pamięci?

Na tym etapie użyj zamiast char * std::string, bo obawiam się, że za mało umiesz w tym momencie, aby wychodzić z dynamicznymi tablicami, bo po przedstawionym kodzie widać, że wiesz tylko o istnieniu operatorów new i delete, ale nic poza tym. Dlatego zacznij od std::string, na char * i dynamiczne alokacje przyjdzie jeszcze czas.

0

Tak myślałem że za wiele z tego kodu nie będzie, ale głównie chodzi mi o to czy jest jakiś prostszy sposób na takie wczytywanie wyrazów do dopasowanej tablicy?
Co do studiowania tych zagadnień to własnie to robie, ale akurat takiego kodu potrzebuje tak jakby na juz.

0

no to na juz to masz problem. Nikt Ci gotowca nie da.

tak jest prostszy sposob mozna to napisac nawet w jednej linijce. Poszukaj na forum a znajdziesz

0

Ok, a wiec dzieki.

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