Problem z pętlą

0

Witam,

Funkcja o nazwie funkcja ma za zadanie pobrać tablicę z maina(int *in) wraz z długością tej tablicy(int size). Chciałbym, żeby ta funkcja utworzyła tablicę 3 razy większą od tej którą otrzymała, oraz wypisała do nowej funkcji zawartość starej a wolne miejsca uzupełniła zerami. Np: Jeśli funkcja otrzyma tablice {1,2,3} to wynikiem funkcji będzie tablica {1,2,3,0,0,0,0,0,0}.
Moja funkcja wpisuje tylko do nowej tablicy, wartości starej ale nie uzupełnia reszty zerami.
W czym tkwi problem?

Napisałem taką funkcję:

 
int* funkcja(int* in, int size)
{
     int z=3*size;
     int *tab2;
     tab2=new int[z];
     int i=0;
     int pkt=0;
     
     for(i=0;i<z;i++)
     {
                     if(i<size)
                     {
                        *(tab2+i)=*(in+i);
                     }
                     if(i>=size)
                     {
                        *(tab2+i)=pkt;
                     } 
     }return tab2;
}

kawałek maina:

 
  for(int i=0;i<ile;i++)
  {
                  cout<<*(funkcja(tab1, ile)+i)<<", ";
  }
0

Jeżeli chcesz przypisać wartość do wskaźnika robisz to bez gwiazdki, tj (tab2+i)=pkt;, gdy używasz gwiazdki tak naprawdę pokazujesz wskaźnikowi na co ma wskazywać, a nie jaką ma mieć wartość.

0

Jeśli zrobię jak piszesz to przy kompilacji wyskakuje błąd:

non-lvalue in assigment

0

TO wywołanie funkcji jakieś takie niebardzo. Za każdym razem jest wywoływana od nowa i za każdym razem jest alokowana ponownie pamięć dla tablicy, a poprzednia nie jest zwalniana. No ale spróbuj tak :

for(int i=0;i<ile *3;i++)
  {
                  cout<<*(funkcja(tab1, ile/3)+i)<<", ";
  }
 
0

dokładnie w tym(ile*3) leżał problem i miałem o tym właśnie napisać :)
Moje niedopatrzenie.
Dzięki za pomoc.

Pozdrawiam,

0
int *funkcja(int* in,int size)
  {
   int *out=new[3*size], Len=size*sizeof(int);
   memcpy(out,in,Len);
   memset(out+Len,0,Len<<1);
   return tab2;
  }

Ta funkcja robi dokładnie to samo co twoja, tylko że szybciej. No i jest krótsza.

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