Lineare Liste
-
Hallo,
Folgendes Problem; mit folgendem Quellcode will ich eine Lineare Liste
erstellen, der jeweilige Inhalt soll auch dynamisch allokiert werden,
VS6 gibt keine keine Fehlermeldung beim Kompilieren aus, selten aber doch
passiert es, dass nach einer Eingabe eine Fehlermeldung erscheint und die
Konsole nach Bestätigung geschlossen wird. Deshalb meine Frage, funktioniert
dass was ich mir vorstellen überhaupt bzw. wo liegt der Fehler in meinem
Code?#include "stdafx.h" #include <stdlib.h> #include <string.h> #include <stdio.h> struct LL{char *inhalt;struct LL *next;}; struct LL *root=NULL; struct LL *erstellen(char *string, struct LL *root); struct LL *erstellen(char *string, struct LL *root) { struct LL *neu; struct LL *watch=NULL; //Erstellen eines neuen Eintrags------------------ neu=(struct LL *) malloc(sizeof(struct LL)); if (neu==NULL) { printf("Speicher voll, Abbruch...\n"); exit(1); } neu->next=NULL; neu->inhalt=(char *) malloc((strlen(string)+1)); strcpy(neu->inhalt,string); //Einfügen mit alphabetischer Sortierung--------- if(root==NULL)root=neu; else { if (strcmp(neu->inhalt,root->inhalt)<0) { watch=root; root=neu; neu->next=watch; } else { watch=root; while ((watch->inhalt!=NULL)&&(strcmp(watch->next->inhalt,neu->inhalt)<0)) { watch=watch->next; neu->next=watch->next; watch->next=neu; } } } return(root); } void main() { char str[100]; struct LL *Neu=NULL; while(1) { gets(str); root=erstellen(str,root); } }
Danke im Vorraus,
greets,
helios84
-
Da du uns nicht verräts, was für ein Fehler auftritt rate ich mal ins Blaue: Du bekommst ne Speicherzugriffs-Verletzung, wenn du einen String einsortierst, der nach der Sortierung ganz ans Ende der Liste eingefügt werden würde.
Du prüfst nämlich den Inhalt auf NULL und nicht den Zeiger auf next:
Mörtl schrieb:
while ((watch->inhalt!=NULL)&&(strcmp(watch->next->inhalt,neu->inhalt)<0)) { watch=watch->next; neu->next=watch->next; watch->next=neu; }
-
while ((watch->inhalt!=NULL)&&(strcmp(watch->next->inhalt,neu->inhalt)<0))
das fette solltest du dir nochmal ueberlegen.
bei ersterem kann ich keine aussage treffen, bei zweiterem ist die sache klar: du weisst nicht, ob ->next existiert.
-
Zur Fehlermeldung
"LL.exe hat ein Problem festgestellt und muss beendet werden."
und dann die Frage ob ich das an MircoSoft schicken will oder nicht
sonst nix