Guten Abend zusammen,
Im Prinzip versuche ich gerade eine verkettete Liste aus einem Textfile einlesen zulassen. Dafür habe ich die nötigen Daten zeilenweise je Datensatz und mit einem #getrennt je Komponente in ein Textfile geschrieben. Das lesen funktioniert für sich genommen auch gut soweit (Funktion "tokout") allerdings funktioniert die Zuweisung auf die Struktur nicht bzw. habe ich irgendwo was mit malloc verbockt. Da ich noch nicht so erfahren bin bitte ich jede Todsünde dich begangen habe zu entschuldigen.
Hier die Funktionen:
Und das Headerfile mit der Struktur:
So also kurz zur erklärung was ich mir so gedacht habe: "daten" soll meine Zwischenablage für die Inhalte der einzelnen Datensätze sein, "pAnfang" der erste Datensatz der Liste und "pCur" alle Nachfolgenden. Wie gesagt kommt allerdings sobald ich load(); abrufe "Speicherzugriffsfehlers (Speicherabzug geschrieben)". Ich hoffe das mir jemand hier helfen kann und bedanke mich vorab für alle Antworten.
MfG Dome
Im Prinzip versuche ich gerade eine verkettete Liste aus einem Textfile einlesen zulassen. Dafür habe ich die nötigen Daten zeilenweise je Datensatz und mit einem #getrennt je Komponente in ein Textfile geschrieben. Das lesen funktioniert für sich genommen auch gut soweit (Funktion "tokout") allerdings funktioniert die Zuweisung auf die Struktur nicht bzw. habe ich irgendwo was mit malloc verbockt. Da ich noch nicht so erfahren bin bitte ich jede Todsünde dich begangen habe zu entschuldigen.
Hier die Funktionen:
Code:
tName *pNxt=NULL;
tName *pAnfang=NULL;
FILE *data;
tName *daten;
tName *tokout(char *buf, tName *daten)
{
strcpy(daten->VName,strtok(buf," #"));
strcpy(daten->NName,strtok(NULL," #"));
daten->Nr=(atoi(strtok(NULL," #")));
return daten;
}
void load()
{
if ((daten=malloc(sizeof(tName)))==NULL)
{
printf("Fehler bei malloc");
exit(-1);
}
data=fopen("data.txt","rt");
tName *pCur=pAnfang;
while(fgets(tBuf,64,data))
{
if ((daten=calloc(1,sizeof(tName)))==0)
{
printf("Calloc fehlgeschlagen.\n");
exit(-1);
}
if (pAnfang==NULL)
{
if ((pAnfang=malloc (sizeof(tName)))==NULL)
{
printf("Malloc fehlgeschlagen.\n");
exit(-1);
}
tokout(tBuf,daten);
pAnfang=daten;
pAnfang->pNxt=NULL;
}
else
{
if ((pCur->pNxt=malloc (sizeof(tName)))==NULL)
{
printf("Malloc fehlgeschlagen.\n");
exit(-1);
}
pCur=pCur->pNxt;
tokout(tBuf,daten);
pCur=daten;
pCur->pNxt=NULL;
}
}
fclose(data);
free(pAnfang);
free(pCur->pNxt);
free(daten);
return;
}
Code:
char tBuf[64];
typedef struct Name {
char VName[15];
char NName[15];
int Nr;
struct Name *pNxt;
}tName;
tName *tokout(char *buf, tName *daten);
void load();
So also kurz zur erklärung was ich mir so gedacht habe: "daten" soll meine Zwischenablage für die Inhalte der einzelnen Datensätze sein, "pAnfang" der erste Datensatz der Liste und "pCur" alle Nachfolgenden. Wie gesagt kommt allerdings sobald ich load(); abrufe "Speicherzugriffsfehlers (Speicherabzug geschrieben)". Ich hoffe das mir jemand hier helfen kann und bedanke mich vorab für alle Antworten.
MfG Dome