Zum Inhalt springen

dynamisches array global benutzen. wie gehts?


Empfohlene Beiträge

Geschrieben

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!

Geschrieben

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

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...