Hi ! Bin neu hier und hab auch gleich mal ne frage !
Hab ein Problem bei einem Projekt wo wir eine Verkettete Liste erstellen sollen
Die Liste ansich ist nicht wirklich mein Problem. Eher das die Liste "allgemein" sein soll. Also vom "inhalts"-Typen unabhängig.
Die liste kann also int, strings als auch structs "verarbeiten", bzw mit den gleichen funktionen hinzufügen usw.
Hier mal kurz die liste
typedef struct Knoten
{
struct Knoten* next ;
void* content ;
} Knoten ;
typedef struct Liste
{
Knoten* first ;
Knoten* last ;
int size ;
} Liste ;
void printList(Liste* l, void (*printContent) (void*)) ;
void appand(Liste* l, void* value) ;
und hier die Funktionen der liste
#include <stdio.h>
#include <stdlib.h>
#include "Listen.h"
void printList(Liste* l, void (*printContent) (void*))
{
Knoten* k = l->first ;
while (k!=NULL)
{
printContent(k->content) ;
k = k->next ;
}
}
void appand(Liste* l, void* value)
{
Knoten* neu = (Knoten*) malloc(sizeof(Knoten)) ;
if (neu == NULL)
{
printf("Kein Arbeitsspeicher mehr vorhanden!\n") ;
exit(EXIT_FAILURE) ;
} ;
(*neu).next = NULL ;
neu->content = value ;
if (l->size == 0)
{
l->first = neu ;
}
else
{
Knoten* letzterKnoten = l->last ;
letzterKnoten->next = neu ;
} ;
l->last = neu ;
l->size++ ; // Anzahl der Knoten in der Liste um 1 erhöhen.
}
Das ganze funktioert auch !
Nun sollen Daten aus einer Textdatei eingelesen werden, und in die liste hinzugefügt werden.
Das ganze klappt bei mir nur, wenn meine Textdatei genau eine Zeile hat. Bei zwei zeilen wird die erste überschrieben, und recht abgehackt ausgegeben!
Grund, meine "eingelesenen" wörter (mit fgets aus der txt datei eingelesen & mit strtok in einzelne wörter zerteilt) gammeln irgendwo im speicher ohne das speicher reserviert wurde. Soweit sogut.
Aber WO soll ich denn speicher reservieren, wenn die liste für den speicher selbst verantwortlich sein soll ?
Sobald ich bei appand anfange speicher für "strings" zu reservieren (mal abgesehen davon, dass ich das nichtmal hinbekommen habe bisher), wird das ganze doch wieder auf strings "begrenzt".
gibt es eine möglichkeit heraus zu bekommen, welcher typ an "appand" übergeben wurde und dann mit ner if anweisung für den entsprechenden typ speicher zu reservieren ?
Hoffe ich habe mein Problem halbwegs verständlich rübergebracht. Ist für die Uni, und ich hab mal wieder viel zu spät angefangen mich damit zu beschäftigen ... Und damit der lerneffekt erhalten bleibt, bin ich über tips / hinweise dankbarer als über vorgefertigte lösungen (halb gelogen aber egal ;P )