Powiekszanie tablicy dynamicznej przez kopiowanie.

0

Witam, czy moge tak powiekszyc tablice dynamiczna? Niby dziala mi to ale nie wiem czy tak mozna.
Program ma wczytywac liczby do tablicy az do momentu wystapienia liczby ujemnej a nastepnei wyswietlic je z tablicy.

#include <iostream>

using namespace std;

int * tab = new int[4];
int * tab2 = new int[4];

int main(){

int a=0;
int c=0;
int b=1;

while (a>=0){

	while(c<4*b && a>=0){
		cout<<"Podaj liczbe: ";
		cin>>a;
		tab[c]=a;
		c++;
	}	
		
	if(c==4*b){
	b++;
		
		
		int * tab2 = new int[4*b];
		tab2=tab;
		
		int * tab = new int[4*b];
		tab=tab2;
		
		//delete [] tab2;
	}	
}

for(b=0;b<c-1;b++){
	cout<<tab[b]<<", ";	
}	
return 0;	
}
0

Nie. Robisz w ten sposób wyciek pamięci i zapewne dodatkowo będziesz pisał po nie swojej pamięci.
tab2=tab powoduje przypisanie wskaźników, nic więcej. W efekcie od razu gubisz te swój wskaźnik na blok pamięci ktory zaalokowałeś.
Poza ty alokacja przypisana do wskaźnika w którym już trzymasz jakiś adres powoduje zgubienie tego adresu.

0

Czy mam zatem kopiowac wszystkie komórki poprzez for po czym usunac niepotrzebna tablice w ten sposob delete [] tab2; ?

0

Musisz. Poza tym musisz też zwalniać wcześniej zaalokowaną pamięć!
Pytanie tylko czemu nie użyjesz <vector>?

0
#include <iostream>
#include <cstring>
using namespace std;

int main()
  {
   size_t count=0,capacity=4;
   int *tab=new int[capacity];
   while(true)
     {
      cout<<"\rPodaj liczbe nr "<<(count+1)<<": ";
      int value;
      cin>>value;
      if(value<0) break;
      if(count>=capacity)
        {
         capacity+=4;
         int *tmp=new int[capacity];
         memcpy(tmp,tab,count*sizeof(int));
         delete[] tab;
         tab=tmp;
        }
      tab[count++]=value;
     }    
   cout<<endl;
   for(int i=0;i<count;++i) cout<<tab[i]<<", ";
   delete[] tab;
   return 0;    
  }

http://ideone.com/EnMnG1

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