Powiekszanie tablicy dynamicznej przez kopiowanie.

Powiekszanie tablicy dynamicznej przez kopiowanie.
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
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.

Kopiuj
#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;	
}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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.

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

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

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
#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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.