Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C (C89, C99 und C11) ::  Problem mit dem Umbiegen eines Zeigers (doppelt verkettete Liste)     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Nayamis
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.11.2010
Beiträge: 28
Beitrag Nayamis Mitglied 14:14:16 09.04.2012   Titel:   Problem mit dem Umbiegen eines Zeigers (doppelt verkettete Liste)            Zitieren

Moin zusammen
Ich kämpfe mich zur Zeit wieder durch doppelt verkettete Listen.
Als Aufgabe haben wir einen recht langen Programmcode bekommen, den wir mit unterschiedlichen Dingen ergänzen sollen, aber um meine anderen Ergänzungen zu testen, muss ich noch an einer bestimmten Stelle "nachfeilen" - dumm nur, das ich genau dort ziemlich auf dem Schlauch stehe.
Würde mich freuen, wenn sich das jemand ein Mal ansehen könnte und mir etwas auf die Sprünge helfen würde.

Gegeben wurde u.A.:
C++:
typedef struct element {
  coord c;
  struct element *prev; // vorheriges Listenelement
  struct element *next; // naechstes Listenelement
} element;

C++:
typedef element *iterator; // "iterator" = Zeiger auf ein "element"

Nun sollen wir dazu eine Funktion "next" aufbauen.

Die sieht nun folgendermaßen bei mir aus:
C++:
iterator next( iterator pos ) {
  // Diese Funktion gibt einen Zeiger
  // auf den Nachfolger von "pos" zurueck
    printf("Aufruf der Next-Funktion");
    return (((element *)pos)->next);
}


Hierbei war wiederum alles, bis auf das Printf und den ganzen Returnbefehl vorgegeben. Ich wage zu behaupten, ich habe einen massiven Fehler ins Return gebaut, nur weiß ich nicht recht, wie es anders aussehen sollte.

Folgende Überlegung steht dahinter:
"pos" zeigt auf ein Element. pos->next kann ich allerdings nicht machen, da pos nicht auf das next des Elementes zugreifen kann. Also biege ich soweit an den Zeigern herum, bis ich per (element *)pos->next besagten Zeiger verwenden kann.

Wo bitte liegt hier mein Fehler =/?
Unregistrierter





Beitrag Unregistrierter 15:45:25 09.04.2012   Titel:              Zitieren

Kannst du mal die Codezeile posten, an der du iterator definierst?

PS: Compilierst du mit -Wall (bei gcc)?


Zuletzt bearbeitet von Unregistrierter am 15:46:03 09.04.2012, insgesamt 1-mal bearbeitet
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2696
Beitrag Wutz Mitglied 20:07:55 09.04.2012   Titel:   Re: Problem mit dem Umbiegen eines Zeigers (doppelt verkettete Liste)            Zitieren

Nayamis schrieb:
pos->next kann ich allerdings nicht machen, da pos nicht auf das next des Elementes zugreifen kann.

Warum stellst du eigentlich deine zuvor gestellte Frage nochmal?

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
Nayamis
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.11.2010
Beiträge: 28
Beitrag Nayamis Mitglied 23:54:04 09.04.2012   Titel:              Zitieren

@ Steffo:
Im main steht noch folgendes:
C++:
int main ( void ) {
 
  list l;
  coord c;
  iterator pos;
[...]
}


Und genau dieses pos wird immer übergeben. In anderer Form tritt es soweit ich es sehe, nicht auf. Müsste ich also meiner Funktion noch etwas hinzufügen?

@Wutz:
Nunja, meine Frage stelle ich eigentlich nur ein Mal. Im unteren Text versuchte ich lediglich, meinen Gedankengang in Worte zu fassen, damit nachzuvollziehen ist, was ich mir dabei gedacht habe =)
dibada
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.04.2011
Beiträge: 16
Beitrag dibada Mitglied 12:45:12 10.04.2012   Titel:              Zitieren

Naja, wenn Du am Ende der Liste angekommen bist hat Dein iterator den Wert NULL und wenn Du dann mit ->next reinschauen willst machts wohl bumm ;)

Du kannst mit

C++:
return pos != NULL ? pos->next : NULL;


oder wenn dir der ?: Operator suspekt ist mit einem if

C++:
if (pos != NULL)
  return pos->next;
else
  return NULL;


sicherstellen, dass Dein Zugriff erlaubt ist.
c++.de :: C (C89, C99 und C11) ::  Problem mit dem Umbiegen eines Zeigers (doppelt verkettete Liste)   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.