2017-03-28 3 views
1

Ich möchte X am Ende meines Array hinzufügen, wenn das Array voll ist Ich verdopple die Größe, aber ich habe Probleme beim Einfügen in NewArray, nachdem ich es in newArray bekomme ich Zeiger verwenden, um zu wechseln dynamicArray zu newArray.Hinzufügen von etwas zu einem dynamischen Array

#include <iostream> 
using namespace std; 

class IntegerDynamicArray { 
    public: 
     IntegerDynamicArray();  
     ~IntegerDynamicArray(); 
     int add(int x); 
    private: 
     int * dynamicArray; 
     int currentSize=maxSize; 
     int maxSize=4; 

};`` 

IntegerDynamicArray::IntegerDynamicArray() 
    { 
     dynamicArray = new int [maxSize]; 
    } 
    IntegerDynamicArray::~IntegerDynamicArray() 
    { 
     delete [] dynamicArray; 
    } 

int IntegerDynamicArray::add(int x) 
    { 
    cout<<x<<endl; 
     if(dynamicArray[currentSize-1]!=0) 
     { 
     int * newArray; 
     newArray= new int[currentSize*2]; 
     for(int i =0;i<currentSize;i++) 
     { 
      newArray[i]=dynamicArray[i]; 
      newArray[currentSize]=x; 

     } 
     currentSize=currentSize*2; 
     dynamicArray = newArray; 


     } 
     else 
     { 
     int * newArray; 
     newArray= new int[currentSize]; 
     for(int i =0;i<currentSize;i++) 
     { 
      newArray[i]=dynamicArray[i]; 
      newArray[currentSize-1]=x; 

     } 

      dynamicArray = newArray; 



     } 
     return *dynamicArray; 
    } 




int main() { 
    IntegerDynamicArray intDynArray; 
    while (1) { 
     char input; 
     cout << "Enter A for add or anything else to quit: "; 
     cin >> input; 
     if (input == 'A') { 
      cout << "Enter number to add: "; 
      int x; 
      cin >> x; 
      cout << intDynArray.add(x) << endl; 
     } else { 
      break; 
     } 
    } 
} 
+1

Verwendung Dies wäre viel einfacher * mit 'std :: vector'. Der 'std :: vector' verwaltet die Speicherzuweisung für Sie, einschließlich der erforderlichen Erweiterung. –

+0

Dies ist für eine Klasse, also muss ich es so machen. –

+0

Ich benötige ein dynamisches Array –

Antwort

0

Es gibt einige Probleme mit Ihrem Code. Weil Sie nicht eine spezielle Frage, das sind die wichtigsten sind gefragt haben:

  • Ihre Klasse fehlt eine Variable mit dem Index des letzten geschrieben (oder nächsten freien) Index des Arrays. Stattdessen verwenden Sie (falsch) currentSize als solche Indexvariable.

  • Bei jedem Aufruf von add() ordnen Sie ein neues Array zu, obwohl es möglicherweise nicht bereits voll ist.

  • Wie bereits in den Kommentaren erwähnt Sie nicht delete [] Ihre alten Arrays nach dem Kopieren in die neue.

  • Sie verwenden 0 als Indikator, dass ein Slot in Ihrem Array leer ist, aber Sie verhindern nicht, dass 0 als reguläres Element hinzugefügt wird, und Sie initialisieren Ihr Array nicht auf Null.

0

Wie Thomas Matthews wies darauf hin:

Sie Speicher undicht während hinzufügen Aufruf (int x). Für jeden Einsatz neuer, sollte es einen Anruf sein zum Löschen

Betrachten Sie das folgende:

int n=10; 
int* x= new int[n]; 
//assign some values 

int* temp=new int[n*2]; //create new array 

for(int i=0;i<n;i++) 
    temp[i]=x[i]; //assign values from x 

delete[] x; //free memory 

x=temp; //assign to x address of new array 

manuelle Speicherverwaltung kann riskant sein, so betrachten std :: vector in Zukunft

Verwandte Themen