wird Compiliert, aber Programm stürzt ab
-
theta schrieb:
Sollte doch eigentlich nicht mal kompilieren, da n nicht konstant ist. Oder irre ich mich?
Stimmt eigentlich. Nur mit new int[i] geht es.
-
wenn ich beim definieren direkt initaliesiere geht es.
Komisch das es aber erst mit i und x auch ging.
Danke für die Hilfe
-
Dein Compiler hätte dies gar nicht kompilieren dürfen!
Wenn du Arrays so benutzen wilst, dann müssen in den eckigen Klammern auch Konstanten stehen!
Bei dir hat demzufolge z.B. die Variable i einen zufälligen Wert, somit "weis" das Programm nie wie groß dein Array sein soll...
Wenn du dynamische Arrays benutzen willst, dann geht das z.B. mit Zeigern und der "Funktion" new:int i; i=3; //oder ein anderer beliebiger Wert int *befehl; //ein int-Zeiger auf einen Speicherbereich im Heap befehl=new int[i]; //reservieren des Speicherbereichs //nun kannst du befehl[0] usw. benutzen //am Ende des Programms dann: delete[] befehl; //Speicherbereich wieder freigeben
-
die Wege des RMS sind untergründig (oder so):
$ g++-4.exe wtf.cpp $ g++-4.exe -ansi -pedantic wtf.cpp wtf.cpp: In function 'int main()': wtf.cpp:9: error: ISO C++ forbids variable length array 'befehl' wtf.cpp:10: error: ISO C++ forbids variable length array 'zahl' wtf.cpp:11: error: ISO C++ forbids variable length array 'welZahl'P.S.: dass es mit i und x ging war wohl eher Zufall
-
danke, für die weiteren Informationen. Ich probiere gerade ein bisschen mal ein paar Sachen aus
-
Jetzt funktioniert das Programm erstmal soweit...
ABER:In case 1: cout << endl; cout << "Variable eingeben: "; cin >> zahl[x]; ++n; cout << "Zahl" << welZahl[n] << "= " << zahl[x] << endl;habe ich ein Problem mit
welZahl[n]statt es von 0(siehe Gesamten Code) auf 1 springt, spuckt es mir immer wieder eine beliebige Zahl aus. Wo ist mein Fehler?
Gesamter Code:
#include <iostream> using namespace std; int main() { int i = 0; int x = 0; int n = 0; int *befehl; befehl=new int[i]; int *zahl; zahl=new int[x]; int *welZahl; welZahl=new int[n]; for (i, x; i<2, x<2; i++, x++) { cout << endl; cout << " Menue " << endl; cout << " Variable eingeben <1>" << endl; cout << " Variable suibtrahieren <2>" << endl; cout << " Variable addieren <3>" << endl; cout << " Programm beenden <0>" << endl; cout << endl; cout << " Ihre Eingabe : "; cin >> befehl[2]; switch(befehl[2]) { case 0: cout << endl; cout << "Programm beenden" << endl; break; case 1: cout << endl; cout << "Variable eingeben: "; cin >> zahl[x]; ++n; cout << "Zahl" << welZahl[n] << "= " << zahl[x] << endl; break; case 2: cout << endl; cout << "Variablen subtrahieren" << endl; break; case 3: cout << endl; cout << "Variablen addieren" << endl; break; default: cout << endl; cout << "Ungueltige Eingabe" << endl; break; } } cin.ignore(); cin.get(); }Sorry das ich so viel Frage was vielleicht ganz logisch ist, aber ich programmiere erst seit gestern mit C++
Danke!
-
Dann nimm dir doch bitte zu erst mal nen Buch oder nen Tuturial...
int i = 0; int x = 0; int n = 0; int *befehl; befehl=new int[i]; int *zahl; zahl=new int[x]; int *welZahl; welZahl=new int[n];Dann kannst du das new auch weglassen, wenn du dann für 0 Elemente Speicher reservierst...
Du solltest zu allererst verstehen, was du machen möchtest/sollst/... - und erst danach solltest du die Vorschläge einfach so übernehmen...for (i, x; i<2, x<2; i++, x++)fällt dir was auf?
switch(befehl[2])was ist mit befehl[0] und befehl[1]? Brauchst du hier womöglich gar kein Array!?
und irgendwie verstehe ich auch nicht, was du bei variable eingeben machen möchtest... so gehts auf jeden fall nicht und ich kann nur raten, was davon du nun machen möchtest

bb
edit:
Nimm das nächste mal bitte die cpp-tags und nicht die code-tags ^^ (links daneben, da steht C/C++ auf dem Button ^^)
-
In einem Buch habe ich gestern schon einiges gelsen und auch schon im Internet einiges nachgelesen. du hast erstmal recht das ich
befehl[2]nicht brauch. das brauchte ich noch, als mein Programm anders war
. Man muss noch nciht verstehen, as ich mit dem Programm machen möchte, da ich erstmal mit kleinen Schritten in diesem Programm anfange. Es soll mir einfach nach Auswahl case 1 "Variable eingeben" bringen und ich geb diese Variable ein. dann soll es mir beim erstem mal "Zahl1= 5" ausgeben beim 2. mal "Zahl2= 6".
-
Du willst also jede neu eingegebene Zahl hinten ins Array einfügen?
Dann ist das C-Array eine denkbar schlechte Lösung...
Es sei denn, du weist davor schon, wie lang das ganze (maximal) werden sollte - auch dann würde ich zwarstd::vectoraus dem Headervector(siehe http://www.cplusplus.com/reference/stl/vector/) vorziehen, aber dann würde es mit nem C-Array auch noch halbwegs einfach gehen...bb
-
ich werde mir mal vector ansehen. Danke dir!
-
np ^^
was ich auch gerade noch gesehen habe:
zu jeden new gehört ein delete und zu jedem new[] ein delete[] ! Das ist kein Vorschlag oder nur guter Stil. Es ist ein muss, da sonst ein Memory-Leak entsteht. Und du hast es schon wieder 3mal vergessen (weiß zwar nicht genau, was bei new int[0] passiert, aber vermutlich wird trotzdem Speicher reserviert, den du mit dem delete[] am Ende des Programms wieder hättest freigeben müssen...bb
-
ok. gut das mit delete habe ihc nicht gewußt. danke
