Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

dynamisches array global benutzen. wie gehts?

Empfohlene Antworten

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!

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

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.

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!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.