Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Feldelemente zählen (Zugriff mittels Zeiger, C++) (http://www.informatikerboard.de/board/thread.php?threadid=100)


Geschrieben von Nuuky am 15.12.2006 um 22:14:

  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



Geschrieben von dachdecker2 am 15.12.2006 um 23:59:

  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.



Geschrieben von Tobias am 16.12.2006 um 12:16:

 

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.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH