Wenn du noch neu in C bist, dann hast du dich mit deinem Problem völlig übernommen. Nimm dir die Zeit, erst einmal an einfachen Beispielen zu lernen! Das ist hinterher schneller, als jetzt zu versuchen, gleich das schwierige Problem zu lösen, wegen dem du mit C angefangen hast. Das wird sowieso nichts und du wirst am Ende bloß alles wegschmeißen müssen und frustriert sein. Ich wiederhole nochmal, weil es so wichtig ist: Du musst von jedem einzelnen Zeichen in deinem Code wissen, was genau es bewirkt und wieso du es gesetzt hast! Hand aufs Herz: Ist das wirklich der Fall oder hast du manches nur kopiert? Ich denke, wir beide kennen die Antwort.
mirrowwinger schrieb:
Folgende Punkte nochmal etwas ausbauen (Vielen Dank):
- Abstraktion
Gutes Lehrbuch lesen. Hier im Forum die Lösungen von Problemen ansehen. Lösungen der Standardbibliothek angucken. Lösungen guter (d.h. in der Regel verbreiteter) Bibliotheken angucken.
Übertriebenes Idealbild: Keine zwei Zeilen im Code sehen sich auch nur ähnlich. Keine zwei Sternchen folgen jemals aufeinander.
Mittel dazu sind structs, typedefs, Funktionen. Teilweise auch Zeiger und Funktionszeiger, wobei das ein etwas schwierigeres Kapitel ist, von dem du erst einmal die Finger lassen solltest.
- Pointerkonvertierungsregeln
Gutes Lehrbuch lesen. Kurzzusammenfassung: Zeiger sind von und nach void* implizit konvertierbar. Bei deinem Code kannst du einfach mal alle Casts rausmachen. Wenn dann der Compiler einen Fehler meldet, dann liegt das da dran, dass da ein Fehler ist, nicht da dran, dass dort ein Cast fehlt.
Ich kompiliere immer folgender Maßen:
gcc -ggdb ...
Der Quellcode ist bis jetzt beim Kompilieren vollständig OHNE WARNUNGEN!!!. Hier weiß ich nicht, ob es eine Möglichkeit gibt die "Empfindlichkeit" des Compilers zu erhöhen.
Füg mal die Optionen -Wall -Wextra hinzu. Starte dein Programm mal mit valgrind (ggf. vorher installieren) und den Optionen
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes dein_programm und gegebenenfalls dessen optionen