Magoo Geschrieben 29. August 2002 Geschrieben 29. August 2002 Hi! Ich möchte mal gerne wissen, wie man dynamisch arrays global benutzen kann. Ich habe im Prinzip folgendes in meiner Datei stehen: // Dateianfang #include <stdlib.h> ... ... int* artikel; void funktion1 () { .... .... .... int x = SucheAnzahlSätze(); int* artikel=new int[x]; .... .... .... } void funktion2 () { .... .... .... int i = 1; cout << artikel .... .... .... delete artikel; .... .... .... } *snip* Jetzt ist das so, das ich in funktion1 wunderbar auf meinen dynamischen array zugreifen kann, in funktion2 jedoch nicht mehr. Warum ist das so, und wie kriege ich das hin, das ich in funktion2 auch noch auf den array zugreifen kann? Compilierfehler habe ich keine und mit Pointerübergabe an Funktionen möchte ich auch nicht arbeiten, weil ich einfach nur wissen möchte, wie man solche dynamischen arrays global benutzen kann... Für Hilfe bin ich recht dankbar! Zitieren
Orffi Geschrieben 29. August 2002 Geschrieben 29. August 2002 Du hast da zwar ein gloabales Array int *artikel deklariert, aber Du benutzt es nicht! In Deiner Funktion void funktion1 () definierst Du ein neues Array mit Namen artikel (int* artikel=new int[x]. Natürlich arbeitest Du dann auf dem in der Funktion definierten Array. In Funktion2 gibt es dieses lokal definierte nicht mehr und schon hast Du Probleme.... Also die Zeile in der Funktion1 umschreiben: artikel = new int[x]; HTH Jan Zitieren
Crush Geschrieben 29. August 2002 Geschrieben 29. August 2002 Böser Fehler: Du legst in funktion1() einen neuen Zeiger unter dem selben Namen an: int* artikel=new int[x]; // ist ein neuer Zeiger korrekt wäre: artikel=new int[x]; Erst mal würde ich den Zeiger gleich mit 0 initialisieren, weil man sonst nicht weiß, wo er hinzeigt. int* artikel=0; oder besser gleich voin vornherein den Zeiger mit einem Array belegen int* artikel=new int[x]; // es ist empfehlenswert das x auch als Variable anzulegen z.B. int artikelSize=50; // = maximale Größe, bzw. Größe des Arrays überhaupt, dadurch wird der new int[x]; zu new int[artikelSize]; int fillpos=0; // einen Zähler solle man schon haben um zu sehen, wie weit das Array gefüllt ist. Alle Zugriffe auf das Array sollten dann aber lieber gleich in eigene Funktionen eingebettet werden void resizeArtikelArray(); // zum Wachsen, sonst ist es nicht wirklich dynamisch -> neues Array anlegen, Altes rüberkopieren, Altes löschen, Zeiger vom Neuen ins Alte eintragen, artikelSize anpassen void artikelInsert (int newelement); int artikelRead (int pos); Und hier muß man dann noch Bereichsprüfungen, etc. vornehmen, da das ja standardmäßig nicht stattfindet. Wenn Du in Funktion2 auf das Array zugreifst, bevor es angelegt wurde wird Speichermüll abgefragt! Deshalb muß eine Initialisierung, etc. alles vorher schon durchgeführt werden. Zitieren
Magoo Geschrieben 29. August 2002 Autor Geschrieben 29. August 2002 Ui. Stimmt. Danke für die Hilfe. Da muss ich wohl irgendwie gepennt haben. Aber Gott sei Dank, gibt es ja euch Danke schon mal! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.