Feldelemente zählen (Zugriff mittels Zeiger, C++)

Neue Frage »

Auf diesen Beitrag antworten »
Nuuky Feldelemente zählen (Zugriff mittels Zeiger, C++)

N'Abend allerseits!

Ich habe folgende Aufgabe und bräuchte ein wenig Schützenhilfe. Einer Funktion soll ein Zeiger auf einen selbst struktutierten Datentypen übergeben werden, die dann die Anzahl der Feldelemente bestimmt und das Ergebnis zurückliefert.

Mein Problem ist die Überprüfung der Feldelemente. Mein bisheriges Programm gibt einen Schmarn aus.

Der strukturierte Datentyp sieht so aus:
struct IFeld() {
unsigned int Anz;
int* lptr;
};

In der main()-Funktion wird für lptr ein zufallegroßes Feld bereitgestellt.

Ich habs mit eine while-Schleife versucht, deren Bedingung die Existenz eines Elementes ist, also sowas wie while(Feld->lptr[i]) {...}


Kann mir jemand weiterhelfen?

Gruß
Nuuky
 
Auf diesen Beitrag antworten »
dachdecker2 RE: Feldelemente zählen (Zugriff mittels Zeiger, C++)

Feldelemente zu zählen ist keine gute Idee - woran stellst du denn fest, ob ein Element das letzte Element ist?

Eine geeignetere Herangehensweise wird sein, die Länge des Feldes irgendwo, zum Beispiel in einer anderen Variable zu speichern. Wenn du wirklich zählen willst, musst du das Letzte Element (oder das, was nach dem letzten kommt) irgendwie markieren.

Ob ein element existiert ist eine Frage, die das Programm nicht beantworten kann. Der Speicher ist forlaufent - du kannst ein einem 10 elemente langen Array auch das 123. element ansprechen, nur dass da irgendetwas anderes gespeichert ist, vielleicht sogar code - du musst also verhindern, hinter dem Array einen schreibzugriff zu machen.
Auf diesen Beitrag antworten »
Tobias

Es ist genau wie unser Herr Dachdecker sagte: Man kann in einer Schleife nicht überprüfen, wann das letzte Feld in *lptr kommt. Es sei denn die Struktur regelt es so, dass das letzte Feld z.B. einen bestimmten Wert hat. Sonst wirst du über das tatsächliche letzte Feld hinausschießen und uninitialisierte Werte bekommen oder aber eine Speicherzugriffsverletzung.

Wie ich deiner Struktur entnehme, musst du das aber auch garnicht tun sondern nur den Wert "Anz" auslesen. Dieser muss natürlich bei jedem Vergrößern oder Verkleinern der Liste neu gesetzt werden.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »