2016-12-09 7 views
1

Ich habe den folgenden Code:C++ Speicherstelle mit Array-Zeigern

#include <iostream> 
using namespace std; 

int *growArray (int* p_values, int cur_size) 
{ 
    int *p_new_values = new int[ cur_size * 2 ]; 
    for (int i = 0; i < cur_size; ++i) 
    { 
     p_new_values[ i ] = p_values[ i ]; 
    } 
    delete p_values; 
    return p_new_values; 
} 
int main() 
{ 
    int next_element = 0; 
    int size = 10; 
    int *p_values = new int[ size ]; 
    int val; 
    cout << "Please enter a number: "; 
    cin >> val; 
    while (val > 0) 
    { 
     if (size == next_element + 1) 
     { 
      cout<< "Im in If"<<endl; 
      p_values = growArray(p_values, size); 
     } 
     p_values[ next_element ] = val; 
     cout << "Please enter a number (or 0 to exit): "; 
     cin >> val; 
    } 

} 

Dieser Code wird dynamiclly Speicher zuordnet. Ich kann alles in diesem Code verstehen, außer einer Sache. Was ist der Zweck dieses wenn? Egal wie viele Eingaben ich gebe, Programm wird nie in das gehen, wenn.

+1

'next_element' wird nie in der Schleife aussehen aussehen sollte geändert aussehen ? –

+0

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

+0

Das ist mir auch aufgefallen ... Dieser Code stammt aus einem Buch. Ich denke nicht, dass es falsch ist. Aber ich weiß nicht .. –

Antwort

1

Sie nie den Wert der Variablen next_element erhöhen, die anfänglich auf 0

int next_element = 0; 

So ist die Expression in der gleich ist, wenn Aussage nicht wahr und das gleiche erste Element überschrieben wird ausgewertet wird

p_values[ next_element ] = val; 

Das Programm ist insgesamt eine falsche Logik. Zum Beispiel die if-Anweisung wie

if (size == next_element) 
     ^^^^^^^^^^^^^^^^^^^^ 
{ 
    cout<< "Im in If"<<endl; 
    p_values = growArray(p_values, size); 
    size *= 2; 
    ^^^^^^^^^ 
} 

Und diese Aussage sollte wie

p_values[ next_element++ ] = val; 
        ^^^^^ 

Und die while-Schleife sollte

cout << "Please enter a number: "; 
while (cin >> val && val > 0) 
{ 
    //... 
    cout << "Please enter a number (or 0 to exit): "; 
} 
+0

Wie kann ein Code aus einem Buch falsch sein? –