Ich habe vor kurzem an einem Programm gearbeitet, das Namen als Eingaben nimmt und schließlich sortieren & binäre Suche sie. Bei dem Versuch, das Array zu einer dynamischen Größe zu machen (die sich bei jeder Schleifeniteration um eins erhöhen würde), kam es jedoch zu verschiedenen Problemen.Dynamische Array-Größe und Absturz bei getline();
Ich kann das String-Array aus 20 Elementen bestehen und das Programm funktioniert, aber das zusätzliche Guthaben für meine Aufgabe ist es, eine dynamische Größe zu machen. Derzeit stürzt das Programm ohne irgendeine Art von Fehlercode ab, sobald es "getline (cin, Names [x])" erreicht. Ich habe herumgesucht und ich weiß, dass es in diesem Fall leichter wäre, einen Vektor anstelle eines Arrays zu erstellen, aber ich glaube nicht, dass ich Vektoren für diese Aufgabe verwenden darf.
Dank
Originalcode
using namespace std;
#include <iostream>
#include <string>
void main()
{
int x = 0;
string * Names = new string[x];
bool NameInputEnd(0);
cout << " Enter your names to be sorted\n";
cout << "To exit just press [Enter] at any time\n";
do
{
cout << x << endl;
cout << "\n< Name " << (x + 1) << " > = ";
!!**CRASHES HERE**!!
getline(cin, Names[x]);
if (Names[x].empty() || x == 19)
{
cout << "\nFinal Name Amount = " << (x + 1) << endl << endl;
NameInputEnd = 1;
continue;
}
x++;
} while (NameInputEnd == 0);
delete [] Names;
}
Änderungen
int tempsize(1), x(0);
string * Names = new string[tempsize];
...
do
{
...
x++;
tempsize++;
}while (NameInputEnd == 0);
Überlegen Sie, was der Wert von 'X' ist, wenn Sie 'Zeichenfolge verwenden * Namen = new String [x];' . Wie viele Elemente hast du gerade gemacht (Wert von 'x')? Außerdem schlage ich vor, dass Sie einen 'std :: vector' verwenden. – NathanOliver
Oh, ich verstehe jetzt, dass ich das Array auf eine Größe von 0 Elementen eingestellt habe, was von dem, was ich gesehen habe, ungültig ist. Ich habe jetzt eine temporäre Variable erstellt, um in 1 zu ersetzen, das gleichzeitig mit x in jeder Schleifeniteration um 1 wächst. –
Arrays können nicht wachsen, sobald sie erstellt wurden. Das Inkrementieren von "x" erhöht die Größe des Arrays nicht magisch. Sie sollten entweder zuerst genügend Platz reservieren ('string * Names = new string [20];') oder verwenden Sie 'std :: vector' - welches in der Größe anwachsen kann. –