2016-04-16 13 views
0

Ich möchte die Größe der Array zu certaind Zahl verkürzen. Ich habe eine KlasseShort-End-Array-Druck falsches Ergebnis

class Numbers{ 
public: 
    Numbers(){ 
    max = 10; 
    arr = new int[max]; 
    current = 0; 
} 
private: 
int *arr; 
int max; 
int current; 
} 

Was ich einfach tun möchte. Wenn die Anordnungsnummern enthalten, (10), zB

arr // 1 2 3 4 5 6 7 8 9 10 

und ich rufe .shorten(number) Verfahren, wird es Array verkürzen Nummer gesagt hat, so in 6 wäre es

arr // 1 2 3 4 5 6 

ich eine Methode geschaffen seine

void Numbers::shorten(int a){ 
    int *tmp = new int[a]; 
    for(int i = 0; i < a; i++){ 
    tmp[i] = arr[i]; 
    } 
    max = a; 
    delete[] arr; 
    arr = tmp; 
} 

Wenn ich diese Methode aufrufen und das Array drucken, sollte die Ausgabe 1 2 3 4 5 6 sein, aber stattdessen druckt das gleiche Array mit den ersten beiden Zahlen einige Zufallszahlen f aus der Erinnerung. Was verursacht dies, wie kann ich dies verhindern?

Druckfunktion sieht wie folgt aus

void Numbers::PrintAll(){ 
    for(int i = 0; i < max ; i++){ 
    cout << arr[i] << endl; 
    } 
} 

und erklärt es als

Numbers one; 

// Ich weiß, ich STL-Container verwenden können, aber ich möchte dies mit Arrays tun.

+0

Dieser Code wird nicht kompiliert, bitte versuchen Sie, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und zeigen Sie uns, einschließlich, wie Sie diese Klasse verwenden, wie Sie initialisieren Sie die Objekte, wie Sie die Funktionen verwenden und vor allem, wie Sie das Ergebnis * drucken *. –

+0

Hinzugefügt der Frage. – user3706129

+0

Wenn Sie sich Ihren Code ansehen, scheint es, als ob es funktionieren sollte, und ich [kann es auch nicht replizieren] (http://ideone.com/WnrunX). Der Fehler ist wahrscheinlich in einem Code, den Sie nicht anzeigen. Übergeben Sie das Objekt nach Wert an eine Funktion? Oder Rückgabe nach Wert? Was macht dein Destruktor? Was macht der Copy-Konstruktor? Hast du einen Kopierkonstruktor? –

Antwort

0

Sie ändern nicht max in Ihrer shorten Methode, also print versucht, mehr Zahlen zu drucken, die tatsächlich dort sind.