select-case und Variable Arrays --> Hilfe!
-
Hallo!
Ich habe folgendes dringende Problem und weiß keinen Rat mehr...
Ich habe in meinem Sourcecode folgende Begebenheit:
int auswahl=0; // (...) Abfrage auswahl, Möglichkeit ist 1 oder 2 int ganzzahl=3; double faktor[ganzzahl+1]; switch (auswahl) { case 1: //In case 1 sind die Faktoren fest definiert. faktor[ganzzahl]=1; faktor[ganzzahl-1]=4; faktor[ganzzahl-2]=6; faktor[ganzzahl-3]=9; //... break; case 2: //Abfrage von ganzzahl als Benutzereingabe //!!! Hier liegt der Hund begraben!!! //Abfrage von jedem Feld von "faktor" und schreiben an die "richitge" Stelle (for-Schleife, bis "ganzzahl"<0) //... break; //...
Nun mein Problem: Wenn ich den Code so lasse, funktioniert er zwar, aber müsste eigentlich bei Benutzereigaben für "ganzzahl" > 4 Probleme machen, da ja vor der select-case-Abfrage das double-Array bereits deklariert wurde.
Wenn ich es aber dahingehend ändere (was meiner Meinung nach richtiger wäre), dass das double-Array jeweils innerhalb der case-Anweisung mit dem entsprechenden Wert (von ganzzahl) deklariert wird, dann meckert mein Compiler (gcc W32 3.2), dass die Variable "faktor" nicht bekannt ist.
Wisst Ihr einen Rat, wie ich das Problem lösen kann?
Vielen Dank schon mal im Voraus,
stevieboy
-
Ich bezweifle, dass dieser Code funktioniert. Schon das hier
double faktor[ganzzahl+1];
müsste vom Compiler angemeckert werden.
Was du willst ist ein dynamisches Array. Dazu solltest du dir mal malloc(), calloc(), realloc() und free() ansehen. Es gibt übrigens schon unzählige Threads mit Anwendungsbeispielen dazu hier im Forum ;).
-
Also es funktioniert schon - das ist nicht die Frage. Allerdings nur nach C99-Standard.
Aber ich habe das "Problem" jetzt anders gelöst, nämlich indem ich das Array auf max. 11 Werte begrenzt habe. Dann sind zwar bei einigen Durchläufen (nämlich wenn ganzzahl<10 ist) nicht alle Felder belegt, aber es läuft wenigstens, ohne andere Variablen zu überschreiben.
Wo wir auch gleich bei deinem Vorschlag wären:
Zuvor eine Anmerkung: Ich habe mit malkoc usw. noch nicht gearbeitet!Aber ist es nicht so, dass ich malloc & co. nur nutzen kann, wenn ich bereits ein Array "vollgepackt" habe?! Wenn ja, dann muss ich ja zuvor ein Array so eröffnet haben:
double ein_array[];
Und davon wurde mir bereits mehrmals abgeraten, da ich im nicht reservierten Speicherbereich "herumschreibe" (und dabei evtl. Variablen kille).
Sag mir, wenn ich mich irre...
- stevieboy -
-
Nein es darf eben kein "vollgepackter" Array sein. Für malloc() & Co. brauchst du einfach nur einen Zeiger. Und du schreibst dann nicht auf unreservierten Speicher, da ja malloc() dazu dient Speicher zu reservieren. Auch mit einem statischen Array kannst du in "unreservierten" Speicher bzw. Speicher anderer Variablen schreiben. Da muss man sowieso als Entwickler aufpassen, dass das nicht passiert (wobei es bei dynamischen Sachen natürlich leichter passiert, da man da besser aufpassen muss ;)).